有没有人成功创建 AsyncStream 并设置它的onTermination
处理程序?我做不到。以下内容直接从提案中复制并粘贴(https://github.com/apple/swift-evolution/blob/main/proposals/0314-async-stream.md),除了我通过现代化摆脱了detach
警告Task.detached
:
let t = Task.detached {
func make123Stream() -> AsyncStream<Int> {
AsyncStream { continuation in
continuation.onTermination = { termination in
switch termination {
case .finished:
print("Regular finish")
case .cancelled:
print("Cancellation")
}
}
Task.detached {
for n in 1...3 {
continuation.yield(n)
sleep(2)
}
continuation.finish()
}
}
}
for await n in make123Stream() {
print("for-in: \(n)")
}
print("After")
}
sleep(3)
t.cancel()
看起来不错,但它不能编译,而且我找不到让它编译的方法。设置器上的错误消息onTermination
如下:
Converting non-concurrent function value to
'@Sendable (AsyncStream<Int>.Continuation.Termination) -> Void'
may introduce data races
我不知道编译器要我做什么。有没有人解决这个问题,解决方案是什么?
(我已经为此提交了一个错误。)