Как запустить фоновую задачу с помощью нового структурированного параллелизма Swift?

#swift #async-await

Вопрос:

Я пишу тест на Swift. Функция, которую я тестирую, блокирует текущий поток, поэтому я хочу запустить ее в фоновом режиме. Раньше я бы завернул его в DispatchQueue.global.async {} это .

С помощью нового структурированного параллелизма Swift я обнаружил Task.detached . Однако в примечаниях к нему говорится

Как правило, следует избегать создания отдельных задач в пользу использования async функций, async let объявлений и await выражений

Есть ли еще один рекомендуемый Apple способ запустить что-то асинхронно, когда у него нет async флага?

Комментарии:

1. Спасибо @Rob. Я пропустил эту часть. Вы хотите, чтобы это был ответ?

Ответ №1:

Документация просто говорит вам, что во многих случаях следует отдавать предпочтение структурированному параллелизму, но там, где вам нужен неструктурированный параллелизм, не стесняйтесь его использовать.

Как уже было сказано, вместо создания отдельной задачи вы можете просто запустить неструктурированную задачу. См. Язык Программирования Swift: Параллелизм: Неструктурированные Задачи. Короче говоря, вместо того , чтобы создавать отдельную задачу с Task.detached { … } помощью, вы можете просто использовать Task { … }