diff options
Diffstat (limited to 'src/System.Private.CoreLib/shared/System/Runtime/CompilerServices/ValueTaskAwaiter.cs')
-rw-r--r-- | src/System.Private.CoreLib/shared/System/Runtime/CompilerServices/ValueTaskAwaiter.cs | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/System.Private.CoreLib/shared/System/Runtime/CompilerServices/ValueTaskAwaiter.cs b/src/System.Private.CoreLib/shared/System/Runtime/CompilerServices/ValueTaskAwaiter.cs index 203039a4a..0b0ed8595 100644 --- a/src/System.Private.CoreLib/shared/System/Runtime/CompilerServices/ValueTaskAwaiter.cs +++ b/src/System.Private.CoreLib/shared/System/Runtime/CompilerServices/ValueTaskAwaiter.cs @@ -9,7 +9,7 @@ using System.Threading.Tasks; namespace System.Runtime.CompilerServices { /// <summary>Provides an awaiter for a <see cref="ValueTask{TResult}"/>.</summary> - public struct ValueTaskAwaiter<TResult> : ICriticalNotifyCompletion + public struct ValueTaskAwaiter<TResult> : ICriticalNotifyCompletion, IValueTaskAwaiter { /// <summary>The value being awaited.</summary> private ValueTask<TResult> _value; // Methods are called on this; avoid making it readonly so as to avoid unnecessary copies @@ -38,5 +38,17 @@ namespace System.Runtime.CompilerServices /// <summary>Gets the task underlying <see cref="_value"/>.</summary> internal Task<TResult> AsTask() => _value.AsTask(); + + /// <summary>Gets the task underlying the incomplete <see cref="_value"/>.</summary> + /// <remarks>This method is used when awaiting and IsCompleted returned false; thus we expect the value task to be wrapping a non-null task.</remarks> + Task IValueTaskAwaiter.GetTask() => _value.AsTaskExpectNonNull(); + } + + /// <summary> + /// Internal interface used to enable extract the Task from arbitrary ValueTask awaiters. + /// </summary>> + internal interface IValueTaskAwaiter + { + Task GetTask(); } } |