internal ContinuationTaskFromPandaTask(IPandaTask currentPandaTask, Func <IPandaTask> nextAction, bool fromCatch = false) { //check - set if (currentPandaTask == null) { throw new ArgumentNullException(nameof(currentPandaTask)); } FromCatch = fromCatch; _nextActionDelegate = nextAction ?? throw new ArgumentNullException(nameof(nextAction)); //start listen task. switch (Status) { case PandaTaskStatus.Pending: currentPandaTask.Done(HandleTaskCompleted).Fail(HandleTaskFailed); break; //no allocations for completed tasks case PandaTaskStatus.Rejected: HandleTaskFailed(currentPandaTask.Error); break; case PandaTaskStatus.Resolved: HandleTaskCompleted(); break; } }
public static PandaTaskAwaiter GetAwaiter(this IPandaTask task) { return(new PandaTaskAwaiter(task)); }
public static PandaTaskAwaiter <T> GetAwaiter <T>(this IPandaTask <T> task) { return(new PandaTaskAwaiter <T>(task)); }
/// <summary> /// Adds timeout handling for given task. If it does not complete within given time an exception will be thrown /// </summary> /// <param name="task">Source task</param> /// <param name="milliseconds">Timeout in milliseconds</param> /// <param name="timeoutMessage">Message for exception</param> /// <exception cref="ArgumentException">Thrown if time is negative</exception> /// <exception cref="TimeoutException" /> public static IPandaTask <T> OrTimeout <T>(this IPandaTask <T> task, int milliseconds, string timeoutMessage = null) { return(OrTimeout(task, TimeSpan.FromMilliseconds(milliseconds), timeoutMessage)); }
public PandaTaskAwaiter(IPandaTask task) { _task = task; }
internal ContinuationTaskFromPandaTask(IPandaTask currentTask, Func <IPandaTask <TResult> > continuationTaskCallback, bool fromReject = false) { //construct non generic continuation task _combinedTask = ConstrcutCombinedTask(currentTask, continuationTaskCallback, fromReject); _combinedTask.Fail(Reject).Done(() => base.SetValue(_continuationTask.Result)); }