0Pricing
Swift Academy · Урок

Структурированный параллелизм и асинхронные функции

Определяйте 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 — локальная установка не требуется.

Все уроки этого курса

  1. Структурированный параллелизм и асинхронные функции
  2. async let, Task и отмена
  3. try await и распространение ошибок
← Назад к Swift Academy