11actor Channel < Success: Sendable , Failure: Error > : Sendable {
22 private var waiters = [ Waiter < Success , Failure > ] ( )
3- private var result : Success ?
4- private var failure : Failure ?
3+ private var result : Result < Success , Failure > ?
54}
65
76typealias Waiter < Success, Failure> = CheckedContinuation < Success , Error >
87
98extension Channel {
109 @discardableResult
11- func fulfill( _ value : Success ) -> Bool {
10+ func fulfill( _ success : Success ) -> Bool {
1211 if result == nil {
13- result = value
12+ result = . success ( success )
1413
1514 while let waiter = waiters. popLast ( ) {
1615 waiter. resume ( returning: success)
@@ -24,8 +23,8 @@ extension Channel {
2423
2524 @discardableResult
2625 func fail( _ failure: Failure ) -> Bool {
27- if self . failure == nil {
28- self . failure = failure
26+ if result == nil {
27+ result = . failure( failure )
2928
3029 while let waiter = waiters. popLast ( ) {
3130 waiter. resume ( throwing: failure)
@@ -41,11 +40,12 @@ extension Channel {
4140 get async throws {
4241 try await withCheckedThrowingContinuation { continuation in
4342 Task {
44- if let result = self . result {
45- continuation. resume ( returning: result)
46- } else if let failure = self . failure {
43+ switch result {
44+ case let . success( success) :
45+ continuation. resume ( returning: success)
46+ case let . failure( failure) :
4747 continuation. resume ( throwing: failure)
48- } else {
48+ case nil :
4949 waiters. append ( continuation)
5050 }
5151 }
0 commit comments