Kaynağa Gözat

More Task extensions.

Daniel Weber 7 yıl önce
ebeveyn
işleme
d1461f1adc

+ 30 - 0
Rx.NET/Source/src/System.Reactive/Internal/TaskExtensions.cs

@@ -44,6 +44,21 @@ namespace System.Threading.Tasks
                 continuationOptions);
         }
 
+        public static Task ContinueWithState<TState>(this Task task, Action<Task, TState> continuationAction, TState state, CancellationToken cancellationToken, TaskContinuationOptions continuationOptions)
+        {
+            return task.ContinueWith(
+                (t, tupleObject) =>
+                {
+                    var (closureAction, closureState) = ((Action<Task, TState>, TState))tupleObject;
+
+                    closureAction(t, closureState);
+                },
+                (continuationAction, state),
+                cancellationToken,
+                continuationOptions,
+                TaskScheduler.Default);
+        }
+
         public static Task ContinueWithState<TResult, TState>(this Task<TResult> task, Action<Task<TResult>, TState> continuationAction, TState state)
         {
             return task.ContinueWith(
@@ -81,5 +96,20 @@ namespace System.Threading.Tasks
                 (continuationAction, state),
                 continuationOptions);
         }
+
+        public static Task ContinueWithState<TResult, TState>(this Task<TResult> task, Action<Task<TResult>, TState> continuationAction, TState state, CancellationToken cancellationToken, TaskContinuationOptions continuationOptions)
+        {
+            return task.ContinueWith(
+                (t, tupleObject) =>
+                {
+                    var (closureAction, closureState) = ((Action<Task<TResult>, TState>, TState))tupleObject;
+
+                    closureAction(t, closureState);
+                },
+                (continuationAction, state),
+                cancellationToken,
+                continuationOptions,
+                TaskScheduler.Default);
+        }
     }
 }