-
Notifications
You must be signed in to change notification settings - Fork 31
Open
Labels
bugSomething isn't workingSomething isn't working
Description
Describe the bug
When using .multicast
I got unexpected error: attempt to await next() on more than one task
. It is my - maybe incorrect? - understanding that I could use several tasks consuming an Async Multicasted sequence?
To Reproduce
I have these variables:
actor Connection {
private let asyncStream: AsyncThrowingStream<MySendableStruct, Swift.Error>
private let asyncContinuation: AsyncThrowingStream<MySendableStruct, Swift.Error>.Continuation
private let multicastSubject = AsyncThrowingPassthroughSubject<MySendableStruct, Swift.Error>()
...
// using this static func: https://github.com/pointfreeco/swift-composable-architecture/blob/53ddc5904c065190d05c035ca0e4589cb6d45d61/Sources/ComposableArchitecture/Effects/ConcurrencySupport.swift#L222-L228
(asyncStream, asyncContinuation) = AsyncThrowingStream.streamWithContinuation()
...
func autoconnectingMulticastedAsync() -> AsyncMulticastSequence<AsyncThrowingStream<MySendableStruct, Swift.Error>, AsyncThrowingPassthroughSubject<MySendableStruct, Swift.Error>> {
asyncStream
.multicast(multicastSubject)
.autoconnect()
}
}
and callsite
...
func connect() async throws {
connectTask?.cancel()
connectTask = Task {
for try await value in autoconnectingMulticastedAsync() {
guard !Task.isCancelled else { return }
// do stuff with `value` that in some case might trigger a new nested `Task`
...
}
}
..
Provide code snippets, or links to gist or repos if possible.
Expected behavior
I would expect to be able to await values in multiple tasks from a multicasted autoconnected Async Seqyuence.
Screenshots
If applicable, add screenshots to help explain your problem.
Environment:
Mac Studio (M1), running macOS Ventura: 13.0.1 (22A400)
Xcode Version 14.1 (14B47b)
AsyncExtension version 0.5.1
Additional context
Add any other context about the problem here.
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working