@@ -590,45 +590,44 @@ where Base.Element: Sendable, Base: _SendableMetatype, Base.AsyncIterator: _Send
590590    } 
591591
592592    func  next( isolation actor :  isolated ( any  Actor ) ? ,  id:  Int )  async  throws  ->  Base . Element ? { 
593-       let  ( factory,  cancelled)  =  state. withLock  {  state ->  ( ( @Sendable   ( )  ->  sending  Base. AsyncIterator ) ? ,  Bool )  in 
594-         switch  state. iteratingTask { 
595-         case  . pending( let  factory) : 
596-           state. iteratingTask =  . starting
597-           return  ( factory,  false ) 
598-         case  . cancelled: 
599-           return  ( nil ,  true ) 
600-         default : 
601-           return  ( nil ,  false ) 
602-         } 
603-       } 
604-       if  cancelled {  return  nil  } 
605-       if  let  factory { 
606-         let  task :  Task < Void ,  Never > 
607-         // for the fancy dance of availability and canImport see the comment on the next check for details
608-         #if swift(>=6.2) 
609-         if  #available( macOS 26 . 0 ,  iOS 26 . 0 ,  tvOS 26 . 0 ,  visionOS 26 . 0 ,  * )  { 
610-           task =  Task ( name:  " Share Iteration " )  {  [ factory,  self ]  in 
611-             await  iterationLoop ( factory:  factory) 
612-           } 
613-         }  else  { 
614-           task =  Task . detached ( name:  " Share Iteration " )  {  [ factory,  self ]  in 
615-             await  iterationLoop ( factory:  factory) 
593+         let  iteratingTask  =  state. withLock  {  state ->  IteratingTask  in 
594+           defer  { 
595+             if  case . pending =  state. iteratingTask { 
596+               state. iteratingTask =  . starting
597+             } 
616598          } 
599+           return  state. iteratingTask
617600        } 
618-         #else 
619-         task =  Task . detached  {  [ factory,  self ]  in 
620-           await  iterationLoop ( factory:  factory) 
621-         } 
622-         #endif 
623-         // Known Issue: there is a very small race where the task may not get a priority escalation during startup
624-         // this unfortuantely cannot be avoided since the task should ideally not be formed within the critical
625-         // region of the state. Since that could lead to potential deadlocks in low-core-count systems.
626-         // That window is relatively small and can be revisited if a suitable proof of safe behavior can be
627-         // determined.
628-         state. withLock  {  state in 
629-           precondition ( state. iteratingTask. isStarting) 
630-           state. iteratingTask =  . running( task) 
631-         } 
601+         
602+         if  case . cancelled =  iteratingTask {  return  nil  } 
603+         
604+         if  case . pending( let  factory)  =  iteratingTask { 
605+             let  task :  Task < Void ,  Never > 
606+             // for the fancy dance of availability and canImport see the comment on the next check for details
607+             #if swift(>=6.2) 
608+             if  #available( macOS 26 . 0 ,  iOS 26 . 0 ,  tvOS 26 . 0 ,  visionOS 26 . 0 ,  * )  { 
609+               task =  Task ( name:  " Share Iteration " )  {  [ factory,  self ]  in 
610+                 await  iterationLoop ( factory:  factory) 
611+               } 
612+             }  else  { 
613+               task =  Task . detached ( name:  " Share Iteration " )  {  [ factory,  self ]  in 
614+                 await  iterationLoop ( factory:  factory) 
615+               } 
616+             } 
617+             #else 
618+             task =  Task . detached  {  [ factory,  self ]  in 
619+               await  iterationLoop ( factory:  factory) 
620+             } 
621+             #endif 
622+             // Known Issue: there is a very small race where the task may not get a priority escalation during startup
623+             // this unfortuantely cannot be avoided since the task should ideally not be formed within the critical
624+             // region of the state. Since that could lead to potential deadlocks in low-core-count systems.
625+             // That window is relatively small and can be revisited if a suitable proof of safe behavior can be
626+             // determined.
627+             state. withLock  {  state in 
628+               precondition ( state. iteratingTask. isStarting) 
629+               state. iteratingTask =  . running( task) 
630+             } 
632631      } 
633632
634633      // withTaskPriorityEscalationHandler is only available for the '26 releases and the 6.2 version of
0 commit comments