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