diff --git a/Sources/AsyncAlgorithms/AsyncThrowingChannel.swift b/Sources/AsyncAlgorithms/AsyncThrowingChannel.swift index 575d88e7..205729e3 100644 --- a/Sources/AsyncAlgorithms/AsyncThrowingChannel.swift +++ b/Sources/AsyncAlgorithms/AsyncThrowingChannel.swift @@ -88,7 +88,11 @@ public final class AsyncThrowingChannel: Asyn 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)]) @@ -143,7 +147,11 @@ public final class AsyncThrowingChannel: Asyn 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()