示例#1
0
 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;
            }
示例#3
0
            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;
			}
		}
示例#5
0
            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;
            }
示例#6
0
 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;
 }
示例#9
0
            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.
                }
            }
示例#10
0
 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;
 }
示例#11
0
            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);
            }
示例#12
0
            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;
		}
示例#18
0
        public bool TrySetCanceled()
        {
            if (this.state != AwaiterStatus.Pending)
            {
                return(false);
            }

            this.state = AwaiterStatus.Canceled;
            this.TryInvokeContinuation();
            return(true);
        }
示例#19
0
        public bool TrySetResult()
        {
            if (this.state != AwaiterStatus.Pending)
            {
                return(false);
            }

            this.state = AwaiterStatus.Succeeded;
            this.TryInvokeContinuation();
            return(true);
        }
示例#20
0
			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();
			}
示例#21
0
        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);
        }
示例#22
0
文件: ETTask.cs 项目: 404Lcc/Lcc
        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);
        }
示例#23
0
文件: ETTask.cs 项目: 404Lcc/Lcc
        public void SetResult()
        {
            if (_awaiterStatus != AwaiterStatus.Pending)
            {
                throw new InvalidOperationException("任务已完成");
            }
            _awaiterStatus = AwaiterStatus.Succeeded;
            Action callback = (Action)_callback;

            callback?.Invoke();
            _callback = null;
        }
示例#24
0
			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;
        }
示例#26
0
        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);
        }
示例#27
0
			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(); }
            }
示例#29
0
        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();
        }
示例#30
0
        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();
        }