Выбор ответа Middle Swift Concurrency спрашивают часто обновлено

Task и Task.detached: разница

Вопрос

Чем Task { } отличается от Task.detached { }, если вызвать их из метода @MainActor-класса?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Task наследует изоляцию актора, приоритет и task-local, detached нет. Неструктурированная задача Task { } берёт контекст места создания: изоляцию актора, приоритет, task-local.

Варианты ответа

  1. Task выполняет тело синхронно в месте вызова, а detached асинхронно в пуле
  2. detached отменяется вместе с родителем, а Task живёт независимо
  3. Разницы нет: detached оставлен как устаревший синоним Task
  4. Task наследует изоляцию актора, приоритет и task-local, detached нетправильный ответ

Разбор

Неструктурированная задача Task { } берёт контекст места создания: изоляцию актора, приоритет, task-local. Из @MainActor-кода её тело выполняется на главном акторе. Task.detached стартует без актора и без наследования, его используют редко, для действительно независимой фоновой работы. Обе задачи асинхронные, и ни одна не отменяется автоматически вместе с создателем: отмену передают явно, сохранив ссылку на задачу.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.