public bool Wait (int millisecondsTimeout, CancellationToken cancellationToken) { if (millisecondsTimeout < -1) throw new ArgumentOutOfRangeException ("millisecondsTimeout"); bool result = true; if (!IsCompleted) { // If the task is ready to be run and we were supposed to wait on it indefinitely without cancellation, just run it if (Status == TaskStatus.WaitingToRun && millisecondsTimeout == Timeout.Infinite && scheduler != null && !cancellationToken.CanBeCanceled) scheduler.RunInline (this, true); if (!IsCompleted) { var continuation = new ManualResetContinuation (); try { ContinueWith (continuation); result = continuation.Event.Wait (millisecondsTimeout, cancellationToken); } finally { if (!result) RemoveContinuation (continuation); continuation.Dispose (); } } } if (IsCanceled) throw new AggregateException (new TaskCanceledException (this)); var exception = Exception; if (exception != null) throw exception; return result; }
public void RunSynchronously(TaskScheduler scheduler) { if (scheduler == null) { throw new ArgumentNullException("scheduler"); } if (Status > TaskStatus.WaitingForActivation) { throw new InvalidOperationException("The task is not in a valid state to be started"); } SetupScheduler(scheduler); var saveStatus = status; Status = TaskStatus.WaitingToRun; try { if (scheduler.RunInline(this)) { return; } } catch (Exception inner) { throw new TaskSchedulerException(inner); } Status = saveStatus; Start(scheduler); Wait(); }
internal void RunSynchronouslyCore (TaskScheduler scheduler) { SetupScheduler (scheduler); var saveStatus = status; Status = TaskStatus.WaitingToRun; try { if (scheduler.RunInline (this, false)) return; } catch (Exception inner) { throw new TaskSchedulerException (inner); } Status = saveStatus; Start (scheduler); Wait (); }
public void RunSynchronously(TaskScheduler scheduler) { if (Status > TaskStatus.WaitingForActivation) { throw new InvalidOperationException("The task is not in a valid state to be started"); } SetupScheduler(scheduler); status = TaskStatus.WaitingToRun; if (scheduler.RunInline(this)) { return; } Start(scheduler); Wait(); }
internal bool WaitCore(int millisecondsTimeout, CancellationToken cancellationToken) { if (IsCompleted) { return(true); } // If the task is ready to be run and we were supposed to wait on it indefinitely without cancellation, just run it if (Status == TaskStatus.WaitingToRun && millisecondsTimeout == Timeout.Infinite && scheduler != null && !cancellationToken.CanBeCanceled) { scheduler.RunInline(this, true); } bool result = true; if (!IsCompleted) { var continuation = new ManualResetContinuation(); try { ContinueWith(continuation); result = continuation.Wait(millisecondsTimeout, cancellationToken); } finally { if (!result) { RemoveContinuation(continuation); } continuation.Dispose(); } } return(result); }