Выбор ответа Middle Swift Concurrency спрашивают часто обновлено
Task и Task.detached: разница
Вопрос
Чем Task { } отличается от Task.detached { }, если вызвать их из метода @MainActor-класса?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Task наследует изоляцию актора, приоритет и task-local, detached нет. Неструктурированная задача Task { } берёт контекст места создания: изоляцию актора, приоритет, task-local.
Варианты ответа
Taskвыполняет тело синхронно в месте вызова, аdetachedасинхронно в пулеdetachedотменяется вместе с родителем, аTaskживёт независимо- Разницы нет:
detachedоставлен как устаревший синонимTask Taskнаследует изоляцию актора, приоритет и task-local,detachedнетправильный ответ
Разбор
Неструктурированная задача Task { } берёт контекст места создания: изоляцию актора, приоритет, task-local. Из @MainActor-кода её тело выполняется на главном акторе. Task.detached стартует без актора и без наследования, его используют редко, для действительно независимой фоновой работы. Обе задачи асинхронные, и ни одна не отменяется автоматически вместе с создателем: отмену передают явно, сохранив ссылку на задачу.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.