public UnityWebRequestAsyncOperationAwaiter(UnityWebRequestAsyncOperation asyncOperation) { this.status = asyncOperation.isDone ? AwaiterStatus.Succeeded : AwaiterStatus.Pending; this.asyncOperation = (this.status.IsCompleted()) ? null : asyncOperation; this.result = (this.status.IsCompletedSuccessfully()) ? asyncOperation.webRequest : null; this.continuationAction = null; }
public UnityWebRequest GetResult() { if (status == AwaiterStatus.Succeeded) { return this.result; } if (status == AwaiterStatus.Pending) { // first timing of call if (asyncOperation.isDone) { status = AwaiterStatus.Succeeded; } else { Error.ThrowNotYetCompleted(); } } this.result = asyncOperation.webRequest; asyncOperation = null; // remove reference. if (continuationAction != null) { asyncOperation.completed -= continuationAction; continuationAction = null; } return this.result; }
T IAwaiter <T> .GetResult() { if (_status == AwaiterStatus.Succeeded) { return(_result); } if (_status == AwaiterStatus.Pending) { // first timing of call if (_asyncOperation.IsDone) { _status = AwaiterStatus.Succeeded; } else { throw new InvalidOperationException("Not yet completed."); } } if (_continuationAction != null && _asyncOperation.IsValid()) { _asyncOperation.Completed -= _continuationAction; _continuationAction = null; } if (_asyncOperation.IsValid()) { _result = _asyncOperation.Result; _asyncOperation = default; // remove reference. } return(_result); }
public void ResetStatus(bool forceReset) { if (forceReset) { status = AwaiterStatus.Pending; } else if (status == AwaiterStatus.Succeeded) { status = AwaiterStatus.Pending; } }
public bool MoveNext() { if (cancellationToken.IsCancellationRequested) { status = AwaiterStatus.Canceled; if (!calledComplete && !registerFinishedAction) { // Call jobHandle.Complete after finished. registerFinishedAction = true; PlayerLoopHelper.AddAction(PlayerLoopTiming.EarlyUpdate, new JobHandleAwaiter(jobHandle, CancellationToken.None)); this.continuation?.Invoke(); } return false; } if (jobHandle.IsCompleted) { if (!calledComplete) { status = AwaiterStatus.Succeeded; calledComplete = true; jobHandle.Complete(); this.continuation?.Invoke(); } return false; } return true; }
public JobHandleAwaiter(JobHandle jobHandle, CancellationToken cancellationToken) { this.jobHandle = jobHandle; this.cancellationToken = cancellationToken; this.status = AwaiterStatus.Pending; this.continuation = null; }
void IAwaiter.GetResult() { if (status == AwaiterStatus.Succeeded) { return; } if (status == AwaiterStatus.Pending) { if (asyncOperationHandle.IsDone) { status = AwaiterStatus.Succeeded; } else { Error.ThrowNotYetCompleted(); } } if (continuationAction != null) { asyncOperationHandle.Completed -= continuationAction; asyncOperationHandle = default; continuationAction = null; } else { asyncOperationHandle = default; } }
public AsyncUnityEventHandler(UnityEvent unityEvent) { action = Invoke; status = AwaiterStatus.Pending; unityEvent.AddListener(action); this.unityEvent = unityEvent; }
public void GetResult() { if (status == AwaiterStatus.Succeeded) { return; } if (status == AwaiterStatus.Pending) { // first timing of call if (asyncOperation.isDone) { status = AwaiterStatus.Succeeded; } else { Error.ThrowNotYetCompleted(); } } if (continuationAction != null) { asyncOperation.completed -= continuationAction; asyncOperation = null; // remove reference. continuationAction = null; } else { asyncOperation = null; // remove reference. } }
public AssetBundleRequestAwaiter(AssetBundleRequest asyncOperation) { this.status = asyncOperation.isDone ? AwaiterStatus.Succeeded : AwaiterStatus.Pending; this.asyncOperation = (this.status.IsCompleted()) ? null : asyncOperation; this.result = (this.status.IsCompletedSuccessfully()) ? asyncOperation.asset : null; this.continuationAction = null; }
public UnityEngine.Object GetResult() { if (status == AwaiterStatus.Succeeded) { return(this.result); } if (status == AwaiterStatus.Pending) { // first timing of call if (asyncOperation.isDone) { status = AwaiterStatus.Succeeded; } else { Error.ThrowNotYetCompleted(); } } this.result = asyncOperation.asset; if (continuationAction != null) { asyncOperation.completed -= continuationAction; asyncOperation = null; // remove reference. continuationAction = null; } else { asyncOperation = null; // remove reference. } return(this.result); }
public AsyncOperationAwaiter(AsyncOperationHandle <T> asyncOperation) { _status = asyncOperation.IsDone ? AwaiterStatus.Succeeded : AwaiterStatus.Pending; _result = asyncOperation.IsDone ? asyncOperation.Result : default; _asyncOperation = _status.IsCompleted() ? default : asyncOperation; _continuationAction = null; }
public virtual bool TrySetCanceled() { if (status == AwaiterStatus.Pending) { status = AwaiterStatus.Canceled; TryInvokeContinuation(); return true; } return false; }
public virtual bool TrySetResult() { if (status == AwaiterStatus.Pending) { status = AwaiterStatus.Succeeded; TryInvokeContinuation(); return true; } return false; }
public bool TrySetCanceled() { if (status == AwaiterStatus.Pending) { status = AwaiterStatus.Canceled; TryInvokeContinuation(); return(true); } return(false); }
public bool TrySetResult() { if (status == AwaiterStatus.Pending) { status = AwaiterStatus.Succeeded; TryInvokeContinuation(); return(true); } return(false); }
public virtual bool TrySetException(Exception ex) { if (status == AwaiterStatus.Pending) { status = AwaiterStatus.Faulted; exception = ExceptionDispatchInfo.Capture(ex); TryInvokeContinuation(); return true; } return false; }
public bool TrySetCanceled() { if (this.state != AwaiterStatus.Pending) { return(false); } this.state = AwaiterStatus.Canceled; this.TryInvokeContinuation(); return(true); }
public bool TrySetResult() { if (this.state != AwaiterStatus.Pending) { return(false); } this.state = AwaiterStatus.Succeeded; this.TryInvokeContinuation(); return(true); }
void InvokeContinuation(AwaiterStatus status) { this.status = status; var cont = this.continuation; // cleanup TaskTracker.RemoveTracking(this); this.continuation = null; this.cancellationToken = CancellationToken.None; this.jobHandle = default(JobHandle); if (cont != null) cont.Invoke(); }
public bool TrySetCanceled(OperationCanceledException e) { if (this.state != AwaiterStatus.Pending) { return(false); } this.state = AwaiterStatus.Canceled; this.exception = ExceptionDispatchInfo.Capture(e); this.TryInvokeContinuation(); return(true); }
public void SetException(Exception exception) { if (_awaiterStatus != AwaiterStatus.Pending) { throw new InvalidOperationException("任务已完成"); } _awaiterStatus = AwaiterStatus.Faulted; Action callback = (Action)_callback; callback?.Invoke(); _callback = ExceptionDispatchInfo.Capture(exception); }
public void SetResult() { if (_awaiterStatus != AwaiterStatus.Pending) { throw new InvalidOperationException("任务已完成"); } _awaiterStatus = AwaiterStatus.Succeeded; Action callback = (Action)_callback; callback?.Invoke(); _callback = null; }
void InvokeContinuation(AwaiterStatus status) { this.status = status; var cont = this.continuation; // cleanup TaskTracker.RemoveTracking(this); this.continuation = null; this.cancellationToken = CancellationToken.None; this.innerEnumerator = null; if (cont != null) cont.Invoke(); }
void Invoke() { status = AwaiterStatus.Succeeded; var c = continuation; continuation = null; if (c != null) { c.Invoke(); } status = AwaiterStatus.Pending; }
private bool TrySetException(Exception e) { if (this.state != AwaiterStatus.Pending) { return(false); } this.state = AwaiterStatus.Faulted; this.exception = ExceptionDispatchInfo.Capture(e); this.TryInvokeContinuation(); return(true); }
public EnumeratorAwaiter(IEnumerator innerEnumerator, CancellationToken cancellationToken) { if (cancellationToken.IsCancellationRequested) { status = AwaiterStatus.Canceled; return; } this.innerEnumerator = innerEnumerator; this.status = AwaiterStatus.Pending; this.cancellationToken = cancellationToken; this.continuation = null; TaskTracker.TrackActiveTask(this, 2); }
void InvokeContinuation(AwaiterStatus status) { this.status = status; var cont = this.continuation; // cleanup TaskTracker.RemoveTracking(this); this.continuation = null; this.cancellationToken = CancellationToken.None; this.progress = null; this.asyncOperation = null; if (cont != null) { cont.Invoke(); } }
public void SetException(Exception e) { if (this.state != AwaiterStatus.Pending) { throw new InvalidOperationException("TaskT_TransitionToFinal_AlreadyCompleted"); } this.state = AwaiterStatus.Faulted; Action c = this.callback as Action; this.callback = ExceptionDispatchInfo.Capture(e); c?.Invoke(); }
public void SetResult() { if (this.state != AwaiterStatus.Pending) { throw new InvalidOperationException("TaskT_TransitionToFinal_AlreadyCompleted"); } this.state = AwaiterStatus.Succeeded; Action c = this.callback as Action; this.callback = null; c?.Invoke(); }