Add new async interfaces
[mono.git] / mcs / class / corlib / System.Runtime.CompilerServices / TaskAwaiter_T.cs
index f04faa845ea2f5655fdd8fb21a04b1c19fb8681a..c0af984ee559c209e0ba021803ad673703a68f6b 100644 (file)
@@ -33,7 +33,7 @@ using System.Threading.Tasks;
 
 namespace System.Runtime.CompilerServices
 {
-       public struct TaskAwaiter<TResult>
+       public struct TaskAwaiter<TResult> : ICriticalNotifyCompletion
        {
                readonly Task<TResult> task;
 
@@ -61,7 +61,15 @@ namespace System.Runtime.CompilerServices
                        if (continuation == null)
                                throw new ArgumentNullException ("continuation");
 
-                       TaskAwaiter.HandleOnCompleted (task, continuation, true);
+                       TaskAwaiter.HandleOnCompleted (task, continuation, true, true);
+               }
+
+               public void UnsafeOnCompleted (Action continuation)
+               {
+                       if (continuation == null)
+                               throw new ArgumentNullException ("continuation");
+
+                       TaskAwaiter.HandleOnCompleted (task, continuation, true, false);
                }
        }
 }