Практическая ситуация: родительская задача Swift отменена во время выполнения дочерней — какое изменение состояния дочерней задачи происходит автоматически?
База Hintsage
Конкурентность
async/await, actors, tasks и безопасность данных.
Практика
Вопросы: Конкурентность
За счёт чего actor предотвращает одновременное выполнение изолированных участков на разных задачах?
Разберите ограничение: почему actor не может реализовать синхронное требование протокола методом, читающим его изолированное состояние?
При объявлении ссылочного типа как @unchecked Sendable какую гарантию безопасности разработчик берёт на себя?
В цикле async-задачи регулярно вызывают Task.yield(): какой гарантии это не даёт?
В синхронном не изолированном коде вызывается синхронный метод, помеченный @MainActor. Перейдёт ли Swift автоматически на главный актор?
При выходе из области withTaskGroup все дочерние задачи уже завершены?
Объясните, почему вызов async-функции сам по себе не запускает новую задачу.
Как async-обёртка над callback API должна передать отмену родительской задачи в незавершённую операцию?
Какую гарантию безопасности данных теряет свойство actor после объявления nonisolated(unsafe)?
Разберите ошибку в адаптере callback API: какое нарушение контракта конкурентности произойдёт при выполнении этого кода?
func load() async -> String {
await withCheckedContinuation { continuation in
LegacyAPI.fetch { value in
continuation.resume(returning: value)
continuation.resume(returning: value + "!")
}
}
}
enum LegacyAPI {
static func fetch(_ completion: @escaping (String) -> Void) {
completion("ok")
completion("again")
}
}
Объясните механизм: зачем вызову синхронного метода actor нужен await?
Высокоприоритетная задача ожидает завершения низкоприоритетной: какое изменение приоритета может произойти у ожидаемой задачи?
Каким образом параметр isolated меняет изоляцию функции, принимающей actor?
Разбор ошибки: почему Swift запрещает параллельным задачам напрямую изменять одну локальную переменную?
Объясните механизм, из-за которого синхронная блокирующая операция внутри async-задачи может остановить прогресс других задач.
При запуске Task.detached из дочерней задачи какое поведение task-local значения нужно ожидать?
Представьте не изолированную async-функцию, начавшуюся на главном потоке: обязана ли она продолжить выполнение после await на том же потоке?
Функция запускает обычную Task и сразу возвращает управление: кто отвечает за её отмену?
Сохраняет ли actor атомарность составной операции, если её реализация содержит await?
Показано 21–40 из 50