Esempio n. 1
0
        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;
            }
        }
Esempio n. 2
0
 public static PandaTaskAwaiter GetAwaiter(this IPandaTask task)
 {
     return(new PandaTaskAwaiter(task));
 }
Esempio n. 3
0
 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));
 }
Esempio n. 5
0
 public PandaTaskAwaiter(IPandaTask task)
 {
     _task = task;
 }
Esempio n. 6
0
 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));
 }