Skip to content

Commit 6d574db

Browse files
committed
Добавлены XML-комментарии и readonly для YieldAsyncAwaitable
Расширена документация на русском языке для структур YieldAsyncAwaitable и YieldAsyncAwaiter, все структуры объявлены как readonly для повышения безопасности. Свойство IsCompleted и методы снабжены подробными XML-комментариями. Удалён неиспользуемый делегат SendOrPostCallback. Улучшена читаемость и самодокументирование кода.
1 parent a0dbc85 commit 6d574db

1 file changed

Lines changed: 17 additions & 5 deletions

File tree

MathCore/Extensions/AsyncAwait/YieldAsyncAwaitable.cs

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,25 @@
99
namespace 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

Comments
 (0)