当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Swift AsyncStream init(unfolding:onCancel:)用法及代码示例


初始化器

init(unfolding:onCancel:)

从给定的 element-producing 闭包构造一个异步流,并带有一个可选的闭包来处理取消。

声明

init(
    unfolding produce: @escaping () async -> Element?,
    onCancel: (() -> Void)? = nil
)

参数

produce

为流异步生成元素的闭包。

onCancel

取消流任务时执行的闭包。

详述

当您有一个可以为流生成元素的异步函数并且不想手动调用延续时,请使用此便捷初始化程序。这个初始化器“unfolds” 你的闭包变成了一个异步流。创建的流自动处理对 AsyncSequence 协议的一致性,包括终止(通过取消或从闭包返回 nil 以完成迭代)。

以下示例显示了使用此初始化程序创建的 AsyncStream,该初始化程序在 one-second 间隔上生成随机数。此示例使用 Swift 多尾随闭包语法,它省略了 unfolding 参数标签。


let stream = AsyncStream<Int> {
        await Task.sleep(1 * 1_000_000_000)
        return Int.random(in: 1...10)
    }
    onCancel: { @Sendable () in print ("Canceled.") }
)


// 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+

相关用法


注:本文由纯净天空筛选整理自apple.com大神的英文原创作品 AsyncStream init(unfolding:onCancel:)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。