diff --git a/Sources/AsyncAlgorithms/AsyncChannel.swift b/Sources/AsyncAlgorithms/AsyncChannel.swift index c256fd09..f6d132f4 100644 --- a/Sources/AsyncAlgorithms/AsyncChannel.swift +++ b/Sources/AsyncAlgorithms/AsyncChannel.swift @@ -89,7 +89,11 @@ public final class AsyncChannel: AsyncSequence, Sendable { switch self { case .awaiting(var awaiting): let continuation = awaiting.remove(Awaiting(placeholder: generation))?.continuation - self = .awaiting(awaiting) + if awaiting.isEmpty { + self = .idle + } else { + self = .awaiting(awaiting) + } return continuation case .idle: self = .awaiting([Awaiting(cancelled: generation)]) @@ -145,7 +149,11 @@ public final class AsyncChannel: AsyncSequence, Sendable { nexts.remove(Awaiting(placeholder: generation)) cancelled = true } - state.emission = .awaiting(nexts) + if nexts.isEmpty { + state.emission = .idle + } else { + state.emission = .awaiting(nexts) + } return nil } }?.resume()