/// <summary> /// Returns completed task with result /// </summary> public static PandaTask <T> GetCompletedTask <T>(T result) { var resultTask = new PandaTask <T>(); resultTask.SetValue(result); return(resultTask); }
/// <summary> /// Helps to get a <see cref="IPandaTask" /> from callback based async method. /// </summary> /// <param name="resultTask">Resulting task that you will await</param> /// <returns>Callback to pass as completion handler</returns> public static Action GetCallbackTask(out PandaTask resultTask) { var result = new PandaTask(); resultTask = result; return(result.Resolve); }
/// <summary> /// Helps to get a <see cref="IPandaTask" /> from callback based async method. /// </summary> /// <typeparam name="T">Result type</typeparam> /// <param name="resultTask">Resulting task that you will await</param> /// <returns>Callback to pass as completion handler</returns> public static Action <T> GetCallbackTask <T>(out PandaTask <T> resultTask) { var result = new PandaTask <T>(); resultTask = result; return(result.SetValue); }
/// <summary> /// Returns rejected task with error /// </summary> public static PandaTask GetTaskWithError(Exception error) { var resultTask = new PandaTask(); resultTask.Reject(error); return(resultTask); }
public void SetResult() { if (_task == null) { _task = new PandaTask <VoidResult>(); } _task.Resolve(); }
public void SetResult(TResult value) { if (_task == null) { _task = new PandaTask <TResult>(); } _task.SetValue(value); }
public void SetException(Exception ex) { if (_task == null) { _task = new PandaTask <TResult>(); } _task.Reject(ex); }
static PandaTasksUtilities() { //create resolved and canceled tasks. Both tasks will be created before first class access. var completedTask = new PandaTask(); completedTask.Resolve(); CompletedTask = completedTask; var canceledTask = new PandaTask(); canceledTask.TryCancel(); CanceledTaskInternal = canceledTask; }
private static Action GetMoveNextAction <TStateMachine>(ref PandaTask <TResult> taskField, ref TStateMachine stateMachine) where TStateMachine : IAsyncStateMachine { if (taskField is AsyncStateMachineTask <TStateMachine> stateMachineTask) { return(stateMachineTask.MoveNextAction); } var ret = new AsyncStateMachineTask <TStateMachine>(); taskField = ret; ret.StateMachine = stateMachine; return(ret.MoveNextAction); }
private UnsafeCompletionSource(CancellationToken cancellationToken) { if (cancellationToken.IsCancellationRequested) { _controlledTask = PandaTasksUtilities.CanceledTaskInternal; return; } _controlledTask = new PandaTask(); if (cancellationToken.CanBeCanceled) { cancellationToken.Register(TryCancelTaskInternal); } }
public PandaTaskCompletionSource(CancellationToken cancellationToken) { if (cancellationToken.IsCancellationRequested) { _controlledTask = PandaTasksUtilities.GetCanceledTaskInternal <TResult>(); return; } _controlledTask = new PandaTask <TResult>(); if (cancellationToken.CanBeCanceled) { cancellationToken.Register(TryCancelTaskInternal); } }
internal static void AwaitOnCompleted <TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine machine, ref PandaTask <TResult> taskField) where TAwaiter : INotifyCompletion where TStateMachine : IAsyncStateMachine { awaiter.OnCompleted(GetMoveNextAction(ref taskField, ref machine)); }
/// <summary> /// Return exception to stack. Must be in Unity thread! /// </summary> /// <param name="task">source task</param> /// <param name="ignoreCancel">ignore OperationCanceledException</param> public static void RethrowError(this PandaTask task, bool ignoreCancel = false) { RethrowError(( IPandaTask )task, ignoreCancel); }
/// <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 PandaTask <T> OrTimeout <T>(this PandaTask <T> task, int milliseconds, string timeoutMessage = null) { return(OrTimeout(task, TimeSpan.FromMilliseconds(milliseconds), timeoutMessage)); }
/// <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="timeout">Timeout time</param> /// <param name="timeoutMessage">Message for exception</param> /// <exception cref="ArgumentException">Thrown if time is negative</exception> /// <exception cref="TimeoutException" /> public static PandaTask <T> OrTimeout <T>(this PandaTask <T> task, TimeSpan timeout, string timeoutMessage = null) { return((PandaTask <T>)OrTimeout((IPandaTask <T>)task, timeout, timeoutMessage)); }
private UnsafeCompletionSource(PandaTask controlledTask) { _controlledTask = controlledTask; }
public PandaTaskCompletionSource() { _controlledTask = new PandaTask(); }
static CancelledPandaTaskProvider() { Value = new PandaTask <T>(); Value.Reject(new TaskCanceledException()); }