初始化器
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:_:)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。