В чём разница между Task { } и Task.detached { }?
Суть
Обе создают неструктурированную задачу: она не является дочерней, родитель её не ждёт, и отмена родителя до неё не доходит. Разница — в том, что наследуется от контекста создания.
Task { }наследует приоритет, task-local значения и актор-изоляцию контекста: созданная внутри@MainActor-метода, она выполнится на main. В Swift 6 изоляция instance-актора наследуется, когда замыкание захватываетselfэтого актора (атрибут@_inheritActorContext).Task.detached { }не наследует ничего: ни приоритет (будет.unspecified, если не задать), ни task-locals, ни изоляцию — телоnonisolatedи выполняется в кооперативном пуле.
Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.
Полный ответ — в DevPrep