AsyncStream — это встроенный тип Swift, который создает AsyncSequence из интерфейса на основе замыкания, позволяя генерировать значения со временем и потреблять их с помощью циклов for await.
Традиционные API на основе коллбэков или делегатов несовместимы с моделью структурированного параллелизма Swift. AsyncStream выступает как мост, преобразуя эти паттерны в чистую асинхронную последовательность, которую можно естественно ожидать.
Ты инициализируешь AsyncStream с замыканием, которое получает объект Continuation. Используй continuation для отправки значений и сигнализации об окончании:
let stream = AsyncStream<Int> { continuation in
someCallbackAPI { value in
continuation.yield(value)
}
continuation.finish()
}
Потребление простое:
for await value in stream {
print(value)
}
.bounded, .unbounded или .dropNewestonTermination на continuation для освобождения ресурсов, когда задача отменяетсяAsyncStream рассчитан на одного потребителя, который проходит по последовательности в каждый момент времениAsyncStream идеален для обёртывания:
Он предоставляет структурированную, читаемую альтернативу глубоко вложенным коллбэкам, делая асинхронный код намного проще для понимания и поддержки.
AsyncStream реализует протокол AsyncSequence, позволяя тебе потреблять его значения с помощью for await циклов и интегрировать в модель структурированной конкурентности Swift.
Новый — ещё не проверен сообществом
Вы