Структурированный параллелизм и асинхронные функции
Определяйте async -функции, вызывайте их с помощью await и изучайте структурированный параллелизм : дочерние задачи завершаются до выхода родительской области действия.
«Структурированный параллелизм и асинхронные функции» — бесплатный урок Swift Academy на CoddyKit. Это урок 1 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 3 уроков всего.
Зачем нужны async/await?
async/await позволяет писать асинхронный код, который читается как синхронный. Благодаря структурированному параллелизму дочерние задачи связаны с временем жизни области видимости — утечек не возникает.
Ваша первая асинхронная функция
async-функция может использовать await для другой асинхронной работы. Создайте Task в скрипте или интерактивной среде, чтобы вызвать её.
// Simulate a short async delay, then return a value
func fetchNumber() async -> Int {
try? await Task.sleep(nanoseconds: 200_000_000) // ~200ms
return 42
}
// Call sites must use "await" from an async context or a Task
Task {
let n = await fetchNumber()
print("Fetched:", n) // 42
}Приостановка и продолжение
await приостанавливает задачу, пока результат не будет готов, после чего выполнение корректно продолжается со следующей строки.
func greet(after seconds: Double) async -> String {
let ns = UInt64(seconds * 1_000_000_000)
try? await Task.sleep(nanoseconds: ns)
return "Hello after \(Int(seconds))s"
}
Task {
print(await greet(after: 1.0))
print("Back on the same task after await.")
}Основы async let
Используйте async let, чтобы запустить дочерние задачи. Они принадлежат текущей области видимости, и перед выходом из неё для них необходимо использовать await.
// Run child tasks concurrently within the same scope
func fetchUser() async -> String { "Ana" }
func fetchScore() async -> Int { 90 }
Task {
async let name = fetchUser()
async let score = fetchScore()
// Both start immediately; await joins them before use
let summary = await "\(name): \(score)"
print(summary) // "Ana: 90"
// Scope ends -> child tasks are awaited automatically (structured)
}Родители дожидаются детей
Структурированность означает, что родитель не может завершиться раньше дочерних задач. Это предотвращает появление осиротевшей работы и делает время жизни предсказуемым.
// Parent Task encapsulates children lifetimes
func loadProfile() async -> String {
async let name = fetchUser()
async let score = fetchScore()
return await "\(name) (\(score))"
}
Task {
let profile = await loadProfile()
print(profile) // e.g., "Ana (90)"
// loadProfile does not return until its children are done
}Рекомендации
Советы:
- Думайте о задачах, а не о потоках.
- Используйте async let для параллельных задач одного уровня; применяйте
awaitдо выхода из области видимости. - Для демонстраций используйте
Task.sleep, а в настоящих приложениях ожидайте завершения сетевого или файлового ввода-вывода.
Определение await
Быстрая проверка: что делает await?
Итоги
Итоги: помечайте функции как async и вызывайте их с помощью await. Используйте async let для запуска параллельных задач одного уровня и полагайтесь на структурированный параллелизм, чтобы дочерние задачи завершались раньше родительских.
Часто задаваемые вопросы
Урок «Структурированный параллелизм и асинхронные функции» бесплатный?
Да — полный текст урока «Структурированный параллелизм и асинхронные функции» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 3 уроков всего.
Чему я научусь в уроке «Структурированный параллелизм и асинхронные функции»?
Определяйте async -функции, вызывайте их с помощью await и изучайте структурированный параллелизм : дочерние задачи завершаются до выхода родительской области действия. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Swift Academy?
Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 3.
Сколько времени занимает урок «Структурированный параллелизм и асинхронные функции»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Swift Academy?
Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Структурированный параллелизм и асинхронные функции
- async let, Task и отмена
- try await и распространение ошибок