Task.cs
Go to the documentation of this file.
80 internal const TaskCreationOptions WorkerTaskNotSupportedOptions = TaskCreationOptions.LongRunning | TaskCreationOptions.PreferFairness;
86 TaskCreationOptions.PreferFairness | TaskCreationOptions.LongRunning | TaskCreationOptions.AttachedToParent;
106 public Task (Action action, CancellationToken cancellationToken, TaskCreationOptions creationOptions)
130 public Task (Action<object> action, object state, CancellationToken cancellationToken, TaskCreationOptions creationOptions)
139 // Spicy Pixel: Recent compiler changes do not allow delegates passed to base() to access 'this'.
152 TaskCreationOptions creationOptions, Task parent = null, Task contAncestor = null, bool ignoreCancellation = false)
161 this.status = cancellationToken.IsCancellationRequested && !ignoreCancellation ? TaskStatus.Canceled : TaskStatus.Created;
222 throw new InvalidOperationException ("RunSynchronously may not be called on a continuation task");
252 public Task ContinueWith (Action<Task> continuationAction, TaskContinuationOptions continuationOptions)
254 return ContinueWith (continuationAction, CancellationToken.None, continuationOptions, TaskScheduler.Current);
259 return ContinueWith (continuationAction, cancellationToken, TaskContinuationOptions.None, TaskScheduler.Current);
264 return ContinueWith (continuationAction, CancellationToken.None, TaskContinuationOptions.None, scheduler);
267 public Task ContinueWith (Action<Task> continuationAction, CancellationToken cancellationToken, TaskContinuationOptions continuationOptions, TaskScheduler scheduler)
274 return ContinueWith (TaskActionInvoker.Create (continuationAction), cancellationToken, continuationOptions, scheduler);
277 internal Task ContinueWith (TaskActionInvoker invoker, CancellationToken cancellationToken, TaskContinuationOptions continuationOptions, TaskScheduler scheduler)
283 var continuation = new Task (invoker, null, cancellationToken, GetCreationOptions (continuationOptions), null, this, lazyCancellation);
294 public Task<TResult> ContinueWith<TResult> (Func<Task, TResult> continuationFunction, TaskContinuationOptions continuationOptions)
296 return ContinueWith<TResult> (continuationFunction, CancellationToken.None, continuationOptions, TaskScheduler.Current);
299 public Task<TResult> ContinueWith<TResult> (Func<Task, TResult> continuationFunction, CancellationToken cancellationToken)
301 return ContinueWith<TResult> (continuationFunction, cancellationToken, TaskContinuationOptions.None, TaskScheduler.Current);
304 public Task<TResult> ContinueWith<TResult> (Func<Task, TResult> continuationFunction, TaskScheduler scheduler)
306 return ContinueWith<TResult> (continuationFunction, CancellationToken.None, TaskContinuationOptions.None, scheduler);
309 public Task<TResult> ContinueWith<TResult> (Func<Task, TResult> continuationFunction, CancellationToken cancellationToken,
317 return ContinueWith<TResult> (TaskActionInvoker.Create (continuationFunction), cancellationToken, continuationOptions, scheduler);
320 internal Task<TResult> ContinueWith<TResult> (TaskActionInvoker invoker, CancellationToken cancellationToken, TaskContinuationOptions continuationOptions, TaskScheduler scheduler)
326 var continuation = new Task<TResult> (invoker, null, cancellationToken, GetCreationOptions (continuationOptions), parent, this, lazyCancellation);
332 internal void ContinueWithCore (Task continuation, TaskContinuationOptions options, TaskScheduler scheduler)
334 const TaskContinuationOptions wrongRan = TaskContinuationOptions.NotOnRanToCompletion | TaskContinuationOptions.OnlyOnRanToCompletion;
335 const TaskContinuationOptions wrongCanceled = TaskContinuationOptions.NotOnCanceled | TaskContinuationOptions.OnlyOnCanceled;
336 const TaskContinuationOptions wrongFaulted = TaskContinuationOptions.NotOnFaulted | TaskContinuationOptions.OnlyOnFaulted;
338 if (((options & wrongRan) == wrongRan) || ((options & wrongCanceled) == wrongCanceled) || ((options & wrongFaulted) == wrongFaulted))
387 // If TaskScheduler.Current is not being used, the scheduler was explicitly provided, so we must use that
388 if (scheduler != TaskScheduler.Current || childWorkAdder == null || HasFlag (creationOptions, TaskCreationOptions.PreferFairness)) {
420 TaskScheduler.Current = HasFlag (creationOptions, TaskCreationOptions.HideScheduler) ? TaskScheduler.Default : scheduler;
509 AotInterlocked.CompareExchange (ref ExceptionSlot.ChildExceptions, new ConcurrentQueue<AggregateException> (), null);
660 // If the task is ready to be run and we were supposed to wait on it indefinitely without cancellation, just run it
661 if (Status == TaskStatus.WaitingToRun && millisecondsTimeout == Timeout.Infinite && scheduler != null && !cancellationToken.CanBeCanceled)
707 public static bool WaitAll (Task[] tasks, int millisecondsTimeout, CancellationToken cancellationToken)
775 public static int WaitAny (Task[] tasks, int millisecondsTimeout, CancellationToken cancellationToken)
842 throw new InvalidOperationException ("A task may only be disposed if it is in a completion state");
860 Task ContinueWith (Action<Task, object> continuationAction, object state, CancellationToken cancellationToken,
887 return ContinueWith (continuationAction, state, CancellationToken.None, TaskContinuationOptions.None, TaskScheduler.Current);
890 public Task ContinueWith (Action<Task, object> continuationAction, object state, CancellationToken cancellationToken)
892 return ContinueWith (continuationAction, state, cancellationToken, TaskContinuationOptions.None, TaskScheduler.Current);
895 public Task ContinueWith (Action<Task, object> continuationAction, object state, TaskContinuationOptions continuationOptions)
897 return ContinueWith (continuationAction, state, CancellationToken.None, continuationOptions, TaskScheduler.Current);
900 public Task ContinueWith (Action<Task, object> continuationAction, object state, TaskScheduler scheduler)
902 return ContinueWith (continuationAction, state, CancellationToken.None, TaskContinuationOptions.None, scheduler);
905 public Task<TResult> ContinueWith<TResult> (Func<Task, object, TResult> continuationFunction, object state)
907 return ContinueWith<TResult> (continuationFunction, state, CancellationToken.None, TaskContinuationOptions.None, TaskScheduler.Current);
910 public Task<TResult> ContinueWith<TResult> (Func<Task, object, TResult> continuationFunction, object state, TaskContinuationOptions continuationOptions)
912 return ContinueWith<TResult> (continuationFunction, state, CancellationToken.None, continuationOptions, TaskScheduler.Current);
915 public Task<TResult> ContinueWith<TResult> (Func<Task, object, TResult> continuationFunction, object state, CancellationToken cancellationToken)
917 return ContinueWith<TResult> (continuationFunction, state, cancellationToken, TaskContinuationOptions.None, TaskScheduler.Current);
920 public Task<TResult> ContinueWith<TResult> (Func<Task, object, TResult> continuationFunction, object state, TaskScheduler scheduler)
922 return ContinueWith<TResult> (continuationFunction, state, CancellationToken.None, TaskContinuationOptions.None, scheduler);
925 public Task<TResult> ContinueWith<TResult> (Func<Task, object, TResult> continuationFunction, object state, CancellationToken cancellationToken,
965 var task = new Task (TaskActionInvoker.Delay, millisecondsDelay, cancellationToken, TaskCreationOptions.None, null, TaskConstants.Finished);
996 return Task.Factory.StartNew (action, cancellationToken, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default);
1009 return TaskExtensionsImpl.Unwrap (Task.Factory.StartNew (function, cancellationToken, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default));
1017 public static Task<TResult> Run<TResult> (Func<TResult> function, CancellationToken cancellationToken)
1022 return Task.Factory.StartNew (function, cancellationToken, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default);
1030 public static Task<TResult> Run<TResult> (Func<Task<TResult>> function, CancellationToken cancellationToken)
1035 return TaskExtensionsImpl.Unwrap (Task.Factory.StartNew (function, cancellationToken, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default));
1081 var task = new Task<TResult[]> (TaskActionInvoker.Empty, null, CancellationToken.None, TaskCreationOptions.None, null, TaskConstants.Finished);
1138 var task = new Task<Task<TResult>> (TaskActionInvoker.Empty, null, CancellationToken.None, TaskCreationOptions.None, null, TaskConstants.Finished);
1173 var task = new Task (TaskActionInvoker.Empty, null, CancellationToken.None, TaskCreationOptions.None, null, TaskConstants.Finished);
1198 var task = new Task<Task> (TaskActionInvoker.Empty, null, CancellationToken.None, TaskCreationOptions.None, null, TaskConstants.Finished);
static Task< Task > WhenAny(params Task[] tasks)
Definition: Task.cs:1091
bool Wait(int millisecondsTimeout, CancellationToken cancellationToken)
Definition: Task.cs:652
Task ContinueWith(Action< Task > continuationAction, TaskContinuationOptions continuationOptions)
Definition: Task.cs:252
static TaskScheduler Current
Definition: TaskScheduler.cs:86
Definition: SpinWait.cs:30
static int WaitAny(Task[] tasks, TimeSpan timeout)
Definition: Task.cs:760
Task(Action< object > action, object state, TaskCreationOptions creationOptions)
Definition: Task.cs:120
void SetResult(TResult result)
Definition: TaskCompletionSource.cs:83
Definition: AggregateException.cs:31
TaskContinuationOptions
Definition: TaskContinuationOptions.cs:31
static Task< Task > WhenAny(IEnumerable< Task > tasks)
Definition: Task.cs:1099
static bool WaitAll(Task[] tasks, TimeSpan timeout)
Definition: Task.cs:697
bool CanBeCanceled
Definition: CancellationToken.cs:117
void RunSynchronously(TaskScheduler scheduler)
Definition: Task.cs:213
Task ContinueWith(Action< Task, object > continuationAction, object state, CancellationToken cancellationToken, TaskContinuationOptions continuationOptions, TaskScheduler scheduler)
Definition: Task.cs:860
static bool WaitAll(Task[] tasks, int millisecondsTimeout, CancellationToken cancellationToken)
Definition: Task.cs:707
Task(Action< object > action, object state, CancellationToken cancellationToken, TaskCreationOptions creationOptions)
Definition: Task.cs:130
static int WaitAny(Task[] tasks, int millisecondsTimeout)
Definition: Task.cs:765
bool IsCancellationRequested
Definition: CancellationToken.cs:123
static Task Run(Func< Task > function, CancellationToken cancellationToken)
Definition: Task.cs:1004
Task ContinueWith(Action< Task, object > continuationAction, object state, TaskScheduler scheduler)
Definition: Task.cs:900
Task ContinueWith(Action< Task > continuationAction, TaskScheduler scheduler)
Definition: Task.cs:262
static TaskScheduler Default
Definition: TaskScheduler.cs:80
static Task Delay(int millisecondsDelay, CancellationToken cancellationToken)
Definition: Task.cs:960
Task ContinueWith(Action< Task, object > continuationAction, object state, TaskContinuationOptions continuationOptions)
Definition: Task.cs:895
Task(Action< object > action, object state, CancellationToken cancellationToken)
Definition: Task.cs:125
CancellationToken(bool canceled)
Definition: CancellationToken.cs:42
Task ContinueWith(Action< Task > continuationAction, CancellationToken cancellationToken)
Definition: Task.cs:257
Interlocked reference exchanges do not work with the older Mono AOT compiler so this type fudges arou...
Definition: AotInterlocked.cs:15
void Wait(CancellationToken cancellationToken)
Definition: Task.cs:637
static Task Run(Action action, CancellationToken cancellationToken)
Definition: Task.cs:991
static Task Delay(TimeSpan delay, CancellationToken cancellationToken)
Definition: Task.cs:955
Task ContinueWith(Action< Task, object > continuationAction, object state)
Definition: Task.cs:885
Task ContinueWith(Action< Task > continuationAction)
Definition: Task.cs:247
ConfiguredTaskAwaitable ConfigureAwait(bool continueOnCapturedContext)
Definition: Task.cs:880
static CancellationToken None
Definition: CancellationToken.cs:52
static int WaitAny(Task[] tasks, int millisecondsTimeout, CancellationToken cancellationToken)
Definition: Task.cs:775
static Task WhenAll(IEnumerable< Task > tasks)
Definition: Task.cs:1046
Definition: IStructuralComparable.cs:33
Task(Action action, CancellationToken cancellationToken)
Definition: Task.cs:100
static void WaitAll(Task[] tasks, CancellationToken cancellationToken)
Definition: Task.cs:692
static bool WaitAll(Task[] tasks, int millisecondsTimeout)
Definition: Task.cs:702
Task(Action action, CancellationToken cancellationToken, TaskCreationOptions creationOptions)
Definition: Task.cs:106
Task ContinueWith(Action< Task, object > continuationAction, object state, CancellationToken cancellationToken)
Definition: Task.cs:890
Task(Action action, TaskCreationOptions creationOptions)
Definition: Task.cs:94
static Task Unwrap(Task< Task > task)
Definition: TaskExtensionsImpl.cs:47
Definition: AotInterlocked.cs:3
Task ContinueWith(Action< Task > continuationAction, CancellationToken cancellationToken, TaskContinuationOptions continuationOptions, TaskScheduler scheduler)
Definition: Task.cs:267
static int WaitAny(Task[] tasks, CancellationToken cancellationToken)
Definition: Task.cs:770
CancellationTokenRegistration Register(Action callback)
Definition: CancellationToken.cs:60
void Dispose()
Definition: CancellationTokenRegistration.cs:45
Definition: Task.cs:43