初始化器
init(_:
init(_:bufferingPolicy:_:)
使用指定的緩衝策略和element-producing 閉包為元素類型構造異步流。
聲明
init(
_ elementType: Element.Type = Element.self,
bufferingPolicy limit: AsyncStream<Element>.Continuation.BufferingPolicy = .unbounded,
_ build: (AsyncStream<Element>.Continuation) -> Void
)
參數
elementType
AsyncStream
生成的元素類型。bufferingPolicy
一個
Continuation.BufferingPolicy
值來設置流的緩衝行為。默認情況下,流緩衝無限數量的元素。您還可以將策略設置為緩衝指定數量的最舊或最新元素。build
為
AsyncStream
生成值的自定義閉包。這個閉包接收一個AsyncStream.Continuation
實例,它用於向流提供元素並在完成時終止流。
詳述
build
閉包接收的AsyncStream.Continuation
適合在並發上下文中使用。發送和完成是線程安全的;所有對延續的調用都被序列化。但是,從多個並發上下文調用它可能會導致 out-of-order 傳遞。
以下示例顯示了使用此初始化程序創建的 AsyncStream
,該初始化程序在 one-second 間隔上生成 100 個隨機數,調用 yield(_:)
將每個元素傳遞到等待調用點。當 for
循環退出時,流通過調用延續的 finish()
方法結束。
let stream = AsyncStream<Int>(Int.self,
bufferingPolicy: .bufferingNewest(5)) { continuation in
Task.detached {
for _ in 0..<100 {
await Task.sleep(1 * 1_000_000_000)
continuation.yield(Int.random(in: 1...10))
}
continuation.finish()
}
}
// Call point:
for await random in stream {
print ("\(random)")
}
可用版本
iOS 13.0+, iPadOS 13.0+, macOS 10.15+, Mac Catalyst 13.0+, tvOS 13.0+, watchOS 6.0+
相關用法
- Swift AsyncStream init(unfolding:onCancel:)用法及代碼示例
- Swift AsyncStream first(where:)用法及代碼示例
- Swift AsyncStream prefix(_:)用法及代碼示例
- Swift AsyncStream drop(while:)用法及代碼示例
- Swift AsyncStream max(by:)用法及代碼示例
- Swift AsyncStream dropFirst(_:)用法及代碼示例
- Swift AsyncStream reduce(_:_:)用法及代碼示例
- Swift AsyncStream prefix(while:)用法及代碼示例
- Swift AsyncStream allSatisfy(_:)用法及代碼示例
- Swift AsyncStream contains(_:)用法及代碼示例
- Swift AsyncStream min()用法及代碼示例
- Swift AsyncStream contains(where:)用法及代碼示例
- Swift AsyncStream flatMap(_:)用法及代碼示例
- Swift AsyncStream filter(_:)用法及代碼示例
- Swift AsyncStream compactMap(_:)用法及代碼示例
- Swift AsyncStream min(by:)用法及代碼示例
- Swift AsyncStream map(_:)用法及代碼示例
- Swift AsyncStream max()用法及代碼示例
- Swift AsyncStream用法及代碼示例
- Swift AsyncSequence dropFirst(_:)用法及代碼示例
- Swift AsyncSequence reduce(_:_:)用法及代碼示例
- Swift AsyncSequence first(where:)用法及代碼示例
- Swift AsyncSequence prefix(_:)用法及代碼示例
- Swift AsyncSequence map(_:)用法及代碼示例
- Swift AsyncSequence allSatisfy(_:)用法及代碼示例
注:本文由純淨天空篩選整理自apple.com大神的英文原創作品 AsyncStream init(_:bufferingPolicy:_:)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。