public static UniTask ToUniTask(this AsyncOperationHandle handle, IProgress <float> progress =
                                        null, PlayerLoopTiming timing = PlayerLoopTiming.Update, CancellationToken cancellationToken =
                                        default(CancellationToken))
        {
            if (cancellationToken.IsCancellationRequested)
            {
                return(UniTask.FromCanceled(cancellationToken));
            }

            if (!handle.IsValid())
            {
                // autoReleaseHandle:true handle is invalid(immediately internal handle == null) so return completed.
                return(UniTask.CompletedTask);
            }

            if (handle.IsDone)
            {
                if (handle.Status == AsyncOperationStatus.Failed)
                {
                    return(UniTask.FromException(handle.OperationException));
                }
                return(UniTask.CompletedTask);
            }

            return(new UniTask(AsyncOperationHandleConfiguredSource.Create(handle, timing, progress, cancellationToken, out var token), token));
        }
        public static UniTask <T> ToUniTask <T>(this AsyncOperationHandle <T> handle, IProgress <float> progress =
                                                null, PlayerLoopTiming timing = PlayerLoopTiming.Update, CancellationToken cancellationToken =
                                                default(CancellationToken))
        {
            if (cancellationToken.IsCancellationRequested)
            {
                return(UniTask.FromCanceled <T>(cancellationToken));
            }

            if (!handle.IsValid())
            {
                throw new Exception("Attempting to use an invalid operation handle");
            }

            if (handle.IsDone)
            {
                if (handle.Status == AsyncOperationStatus.Failed)
                {
                    return(UniTask.FromException <T>(handle.OperationException));
                }
                return(UniTask.FromResult(handle.Result));
            }

            return(new UniTask <T>(AsyncOperationHandleConfiguredSource <T> .Create(handle, timing, progress, cancellationToken, out var token), token));
        }
        public static (UniTask, CancellationTokenRegistration) ToUniTask(this CancellationToken cancellationToken)
        {
            if (cancellationToken.IsCancellationRequested)
            {
                return(UniTask.FromCanceled(cancellationToken), default(CancellationTokenRegistration));
            }

            var promise = new UniTaskCompletionSource();

            return(promise.Task, cancellationToken.RegisterWithoutCaptureExecutionContext(cancellationTokenCallback, promise));
        }
 public static UniTask <UnityEngine.Object[]> AwaitForAllAssets(this AssetBundleRequest asyncOperation, CancellationToken cancellationToken)
 {
     Error.ThrowArgumentNullException(asyncOperation, nameof(asyncOperation));
     if (cancellationToken.IsCancellationRequested)
     {
         return(UniTask.FromCanceled <UnityEngine.Object[]>(cancellationToken));
     }
     if (asyncOperation.isDone)
     {
         return(UniTask.FromResult <UnityEngine.Object[]>(asyncOperation.allAssets));
     }
     return(new UniTask <UnityEngine.Object[]>(AssetBundleRequestAllAssetsWithCancellationSource.Create(asyncOperation, cancellationToken, out var token), token));
 }
Пример #5
0
 public static UniTask <UnityEngine.Object[]> AwaitForAllAssets(this AssetBundleRequest asyncOperation, IProgress <float> progress = null, PlayerLoopTiming timing = PlayerLoopTiming.Update, CancellationToken cancellationToken = default(CancellationToken))
 {
     Error.ThrowArgumentNullException(asyncOperation, nameof(asyncOperation));
     if (cancellationToken.IsCancellationRequested)
     {
         return(UniTask.FromCanceled <UnityEngine.Object[]>(cancellationToken));
     }
     if (asyncOperation.isDone)
     {
         return(UniTask.FromResult(asyncOperation.allAssets));
     }
     return(new UniTask <UnityEngine.Object[]>(AssetBundleRequestAllAssetsConfiguredSource.Create(asyncOperation, timing, progress, cancellationToken, out var token), token));
 }
 public static UniTask ToUniTask(this AsyncOperation asyncOperation, IProgress <float> progress = null, PlayerLoopTiming timing = PlayerLoopTiming.Update, CancellationToken cancellationToken = default(CancellationToken))
 {
     Error.ThrowArgumentNullException(asyncOperation, nameof(asyncOperation));
     if (cancellationToken.IsCancellationRequested)
     {
         return(UniTask.FromCanceled(cancellationToken));
     }
     if (asyncOperation.isDone)
     {
         return(UniTask.CompletedTask);
     }
     return(new UniTask(AsyncOperationConfiguredSource.Create(asyncOperation, timing, progress, cancellationToken, out var token), token));
 }
Пример #7
0
 public static UniTask <UnityEngine.Object> WithCancellation(this ResourceRequest asyncOperation, CancellationToken cancellationToken)
 {
     Error.ThrowArgumentNullException(asyncOperation, nameof(asyncOperation));
     if (cancellationToken.IsCancellationRequested)
     {
         return(UniTask.FromCanceled <UnityEngine.Object>(cancellationToken));
     }
     if (asyncOperation.isDone)
     {
         return(UniTask.FromResult(asyncOperation.asset));
     }
     return(new UniTask <UnityEngine.Object>(ResourceRequestWithCancellationSource.Create(asyncOperation, cancellationToken, out var token), token));
 }
Пример #8
0
 public static UniTask WithCancellation(this AsyncOperation asyncOperation, CancellationToken cancellationToken)
 {
     Error.ThrowArgumentNullException(asyncOperation, nameof(asyncOperation));
     if (cancellationToken.IsCancellationRequested)
     {
         return(UniTask.FromCanceled(cancellationToken));
     }
     if (asyncOperation.isDone)
     {
         return(UniTask.CompletedTask);
     }
     return(new UniTask(AsyncOperationWithCancellationSource.Create(asyncOperation, cancellationToken, out var token), token));
 }
Пример #9
0
 public static UniTask <T> WithCancellation <T>(this AsyncOperationHandle <T> handle, CancellationToken cancellationToken)
 {
     if (cancellationToken.IsCancellationRequested)
     {
         return(UniTask.FromCanceled <T>(cancellationToken));
     }
     if (handle.IsDone)
     {
         if (handle.Status == AsyncOperationStatus.Failed)
         {
             return(UniTask.FromException <T>(handle.OperationException));
         }
         return(UniTask.FromResult(handle.Result));
     }
     return(new UniTask <T>(AsyncOperationHandleWithCancellationSource <T> .Create(handle, cancellationToken, out var token), token));
 }
 public static UniTask <UnityWebRequest> ToUniTask(this UnityWebRequestAsyncOperation asyncOperation, IProgress <float> progress = null, PlayerLoopTiming timing = PlayerLoopTiming.Update, CancellationToken cancellationToken = default(CancellationToken))
 {
     Error.ThrowArgumentNullException(asyncOperation, nameof(asyncOperation));
     if (cancellationToken.IsCancellationRequested)
     {
         return(UniTask.FromCanceled <UnityWebRequest>(cancellationToken));
     }
     if (asyncOperation.isDone)
     {
         if (asyncOperation.webRequest.IsError())
         {
             return(UniTask.FromException <UnityWebRequest>(new UnityWebRequestException(asyncOperation.webRequest)));
         }
         return(UniTask.FromResult(asyncOperation.webRequest));
     }
     return(new UniTask <UnityWebRequest>(UnityWebRequestAsyncOperationConfiguredSource.Create(asyncOperation, timing, progress, cancellationToken, out var token), token));
 }
Пример #11
0
        public static UniTask ToUniTask(this AsyncOperationHandle handle, IProgress <float> progress = null, PlayerLoopTiming timing = PlayerLoopTiming.Update, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (cancellationToken.IsCancellationRequested)
            {
                return(UniTask.FromCanceled(cancellationToken));
            }
            if (handle.IsDone)
            {
                if (handle.Status == AsyncOperationStatus.Failed)
                {
                    return(UniTask.FromException(handle.OperationException));
                }
                return(UniTask.CompletedTask);
            }

            return(new UniTask(AsyncOperationHandleConfiguredSource.Create(handle, timing, progress, cancellationToken, out var token), token));
        }
Пример #12
0
        public static UniTask WithCancellation(this AsyncOperationHandle handle, CancellationToken cancellationToken)
        {
            if (cancellationToken.IsCancellationRequested)
            {
                return(UniTask.FromCanceled(cancellationToken));
            }
            if (handle.IsDone)
            {
                if (handle.Status == AsyncOperationStatus.Failed)
                {
                    return(UniTask.FromException(handle.OperationException));
                }
                return(UniTask.CompletedTask);
            }

            return(new UniTask(AsyncOperationHandleWithCancellationSource.Create(handle, cancellationToken, out var token), token));
        }
Пример #13
0
 public static UniTask <UnityWebRequest> WithCancellation(this UnityWebRequestAsyncOperation asyncOperation, CancellationToken cancellationToken)
 {
     Error.ThrowArgumentNullException(asyncOperation, nameof(asyncOperation));
     if (cancellationToken.IsCancellationRequested)
     {
         return(UniTask.FromCanceled <UnityWebRequest>(cancellationToken));
     }
     if (asyncOperation.isDone)
     {
         if (asyncOperation.webRequest.IsError())
         {
             return(UniTask.FromException <UnityWebRequest>(new UnityWebRequestException(asyncOperation.webRequest)));
         }
         return(UniTask.FromResult(asyncOperation.webRequest));
     }
     return(new UniTask <UnityWebRequest>(UnityWebRequestAsyncOperationWithCancellationSource.Create(asyncOperation, cancellationToken, out var token), token));
 }
        /// <summary>
        /// Ignore task result when cancel raised first.
        /// </summary>
        public static UniTask <T> WithCancellation <T>(this UniTask <T> task, CancellationToken cancellationToken)
        {
            if (!cancellationToken.CanBeCanceled)
            {
                return(task);
            }

            if (cancellationToken.IsCancellationRequested)
            {
                return(UniTask.FromCanceled <T>(cancellationToken));
            }

            if (task.Status.IsCompleted())
            {
                return(task);
            }

            return(new UniTask <T>(new WithCancellationSource <T>(task, cancellationToken), 0));
        }
Пример #15
0
        /// <summary>
        /// Ignore task result when cancel raised first.
        /// </summary>
        public static UniTask AttachExternalCancellation(this UniTask task, CancellationToken cancellationToken)
        {
            if (!cancellationToken.CanBeCanceled)
            {
                return(task);
            }

            if (cancellationToken.IsCancellationRequested)
            {
                return(UniTask.FromCanceled(cancellationToken));
            }

            if (task.Status.IsCompleted())
            {
                return(task);
            }

            return(new UniTask(new AttachExternalCancellationSource(task, cancellationToken), 0));
        }
Пример #16
0
            public override UniTask <bool> WaitToReadAsync(CancellationToken cancellationToken)
            {
                if (cancellationToken.IsCancellationRequested)
                {
                    return(UniTask.FromCanceled <bool>(cancellationToken));
                }

                lock (parent.items) {
                    if (parent.items.Count != 0)
                    {
                        return(CompletedTasks.True);
                    }

                    if (parent.closed)
                    {
                        if (parent.completionError == null)
                        {
                            return(CompletedTasks.False);
                        }
                        else
                        {
                            return(UniTask.FromException <bool>(parent.completionError));
                        }
                    }

                    cancellationTokenRegistration.Dispose();

                    core.Reset();
                    isWaiting = true;

                    this.cancellationToken = cancellationToken;
                    if (this.cancellationToken.CanBeCanceled)
                    {
                        cancellationTokenRegistration =
                            this.cancellationToken.RegisterWithoutCaptureExecutionContext(CancellationCallbackDelegate,
                                                                                          this);
                    }

                    return(new UniTask <bool>(this, core.Version));
                }
            }