Реализовать метод устаревшего протокола в актере и доступ к изолированному контексту синхронноIOS

Программируем под IOS
Ответить
Anonymous
 Реализовать метод устаревшего протокола в актере и доступ к изолированному контексту синхронно

Сообщение Anonymous »

Я хотел бы задать вопрос, является ли это хорошим способом реализовать Legacy, не принадлежащее ME MEDENT, и как переключиться на изоляцию актера. Сделайте некоторую мутацию и возврат к блокированию/синхронному способу. Я знаю, что мы должны избегать блокировки в быстром параллелизме, но в этом случае вызывающий абонент ожидает, что это выполнение должно блокировать ... < /p>
3 -й протокол, который мы не можем изменить. Стоимость изменения в данный момент. < /P>

Код: Выделить всё

public protocol SyncRunner {
associatedtype R
func run() -> Result
}
< /code>
И это синхронизация реализации примера Actor. < /p>
final actor CounterSyncRunner: SyncRunner {
private let queue = DispatchSerialQueue(label: "useCaseQueue", qos: .utility)

nonisolated var unownedExecutor: UnownedSerialExecutor {
queue.asUnownedSerialExecutor()
}

private var counter: Int = 0

nonisolated func run() -> Result {
// I would like to call it in the context of actor but in a synchronous /blocking manner. Is this good way to do it?
var result: Int = 0
queue.sync { // sync here
assumeIsolated {
$0.counter += 1
result = $0.counter
}
}
return .success(result)
}
}
Или у нас есть другие, лучшие варианты реализации неизолированных методов и переключения внутри них на изоляцию актера синхронизированием?

Подробнее здесь: https://stackoverflow.com/questions/797 ... synchronio
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»