99namespace System . Threading . Tasks ;
1010
1111[ StructLayout ( LayoutKind . Sequential , Size = 1 ) ]
12- public struct YieldAsyncAwaitable
12+ /// <summary>Структура, представляющая awaitable для планирования продолжения через пул потоков</summary>
13+ public readonly struct YieldAsyncAwaitable
1314{
14- public YieldAsyncAwaiter GetAwaiter ( ) => new ( ) ;
15+ /// <summary>Возвращает awaiter для этого awaitable</summary>
16+ /// <returns>Экземпляр `YieldAsyncAwaiter` для ожидания</returns>
17+ public readonly YieldAsyncAwaiter GetAwaiter ( ) => new ( ) ;
1518
1619 [ StructLayout ( LayoutKind . Sequential , Size = 1 ) ]
1720 //[HostProtection(SecurityAction.LinkDemand, ExternalThreading = true, Synchronization = true)]
1821 // ReSharper disable once RedundantExtendsListEntry
19- public struct YieldAsyncAwaiter : ICriticalNotifyCompletion , INotifyCompletion
22+ /// <summary>Awaiter для `YieldAsyncAwaitable`, планирующий продолжение в пуле потоков</summary>
23+ public readonly struct YieldAsyncAwaiter : ICriticalNotifyCompletion , INotifyCompletion
2024 {
2125 private static readonly WaitCallback __WaitCallbackRunAction = RunAction ;
2226 // ReSharper disable once UnusedMember.Local
23- private static readonly SendOrPostCallback __SendOrPostCallbackRunAction = RunAction ;
27+ // private static readonly SendOrPostCallback __SendOrPostCallbackRunAction = RunAction;
2428
25- public bool IsCompleted => false ;
29+ /// <summary>Всегда возвращает false, чтобы заставить асинхронный метод отложить продолжение</summary>
30+ public readonly bool IsCompleted => false ;
2631
2732 private static void RunAction ( object ? action ) => ( ( Action ) action ) ( ) ;
2833
@@ -37,12 +42,19 @@ private static void QueueContinuation(Action continuation, bool FlowContext)
3742 ThreadPool . UnsafeQueueUserWorkItem ( __WaitCallbackRunAction , continuation ) ;
3843 }
3944
45+ /// <summary>Планирует продолжение с сохранением текущего контекста исполнения</summary>
46+ /// <param name="continuation">Делегат, представляющий продолжение</param>
47+ /// <exception cref="ArgumentNullException">Если `continuation` равен null</exception>
4048 [ SecuritySafeCritical ]
4149 public void OnCompleted ( Action continuation ) => QueueContinuation ( continuation , true ) ;
4250
51+ /// <summary>Планирует продолжение без сохранения контекста исполнения</summary>
52+ /// <param name="continuation">Делегат, представляющий продолжение</param>
53+ /// <exception cref="ArgumentNullException">Если `continuation` равен null</exception>
4354 [ SecurityCritical ]
4455 public void UnsafeOnCompleted ( Action continuation ) => QueueContinuation ( continuation , false ) ;
4556
57+ /// <summary>Завершает awaiter без возвращаемого значения</summary>
4658 public void GetResult ( ) { }
4759 }
4860}
0 commit comments