I didn't really understand exactly what @John_McCall meant above. I think he is saying that this is an expected use pattern:
// Is this an expected and acceptable use pattern?
private var continuation: AsyncStream<String>.Continuation?
lazy var outputStream = AsyncStream<String> { continuation in
self.continuation = continuation
}
private func pushValue() {
continuation?.yield("My String")
}
Afaict this works and doesn't appear to be broken in any way, but it feels a little strange to me. If this is "not the right way", please let me know ![]()
Also note that, in the example above, the stream is intended to always be "open", and so you never need to finish the continuation.
Edit: Nevermind, read through SE-0314 (Second review): AsyncStream and AsyncThrowingStream - #37 by yuriferretti, where it was confirmed that storing the continuation outside the closure is expected and fine.
Also found @taylorswift's other thread: `AsyncStream` constructor which also returns its Continuation
I agree that it is a rather awkward pattern, I would be in favor of either a constructor that returns the continuation too, or another primitive that is better suited for this scenario ![]()