示例#1
0
 bool TryReturn()
 {
     core.Reset();
     TaskTracker.RemoveTracking(this);
     handle            = default;
     progress          = default;
     cancellationToken = default;
     return(pool.TryPush(this));
 }
 internal void MarkHandled()
 {
     if (!handled)
     {
         handled = true;
         core.MarkHandled();
         TaskTracker.RemoveTracking(this);
     }
 }
 bool TryReturn()
 {
     TaskTracker.RemoveTracking(this);
     core.Reset();
     asyncOperation    = default;
     progress          = default;
     cancellationToken = default;
     return(pool.TryPush(this));
 }
示例#4
0
 bool TryReturn()
 {
     TaskTracker.RemoveTracking(this);
     core.Reset();
     currentFrameCount = default;
     delayFrameCount   = default;
     cancellationToken = default;
     return(pool.TryPush(this));
 }
示例#5
0
 bool TryReturn()
 {
     TaskTracker.RemoveTracking(this);
     core.Reset();
     delayFrameTimeSpan = default;
     elapsed            = default;
     cancellationToken  = default;
     return(pool.TryPush(this));
 }
 public static AutoResetUniTaskCompletionSource Create()
 {
     if (!pool.TryPop(out var result))
     {
         result = new AutoResetUniTaskCompletionSource();
     }
     TaskTracker.TrackActiveTask(result, 2);
     return(result);
 }
 public UniTask DisposeAsync()
 {
     if (!isDisposed)
     {
         isDisposed = true;
         TaskTracker.RemoveTracking(this);
         completionSource.TrySetCanceled(cancellationToken);
         parent.triggerEvent.Remove(this);
     }
     return(default);
 bool TryReturn()
 {
     TaskTracker.RemoveTracking(this);
     core.Reset();
     cancellationTokenRegistration.Dispose();
     cancellationTokenRegistration = default;
     parent.triggerEvent.Remove(this);
     parent            = null;
     cancellationToken = default;
     return(pool.TryPush(this));
 }
 bool TryReturn()
 {
     TaskTracker.RemoveTracking(this);
     core.Reset();
     tween.onUpdate       = originalUpdateAction;
     tween.onKill         = null;
     tween                = default;
     cancellationToken    = default;
     originalUpdateAction = default;
     return(pool.TryPush(this));
 }
 bool TryReturn()
 {
     TaskTracker.RemoveTracking(this);
     core.Reset();
     target            = default;
     currentValue      = default;
     monitorFunction   = default;
     equalityComparer  = default;
     cancellationToken = default;
     return(pool.TryPush(this));
 }
示例#11
0
 public void GetResult(short token)
 {
     try
     {
         TaskTracker.RemoveTracking(this);
         core.GetResult(token);
     }
     finally
     {
         pool.TryReturn(this);
     }
 }
示例#12
0
            // Cancellation is not supported.
            public static JobHandlePromise Create(JobHandle jobHandle, out short token)
            {
                // not use pool.
                var result = new JobHandlePromise();

                result.jobHandle = jobHandle;

                TaskTracker.TrackActiveTask(result, 3);

                token = result.core.Version;
                return(result);
            }
示例#13
0
            public UniTask DisposeAsync()
            {
                if (!isDisposed)
                {
                    isDisposed = true;
                    TaskTracker.RemoveTracking(this);
                    registration1.Dispose();
                    registration2.Dispose();
                    unityEvent.RemoveListener(unityAction);
                }

                return(default);
示例#14
0
            public UnityWebRequest GetResult(short token)
            {
                try
                {
                    TaskTracker.RemoveTracking(this);

                    return(core.GetResult(token));
                }
                finally
                {
                    pool.TryReturn(this);
                }
            }
示例#15
0
 public void SingalCompleted(Exception error)
 {
     if (error != null)
     {
         TaskTracker.RemoveTracking(this);
         core.TrySetException(error);
     }
     else
     {
         TaskTracker.RemoveTracking(this);
         core.TrySetResult(false);
     }
 }
示例#16
0
            public AssetBundle GetResult(short token)
            {
                try
                {
                    TaskTracker.RemoveTracking(this);

                    return(core.GetResult(token));
                }
                finally
                {
                    pool.TryReturn(this);
                }
            }
示例#17
0
            public Enumerator(AsyncReactiveProperty <T> parent, CancellationToken cancellationToken, bool publishCurrentValue)
            {
                this.parent            = parent;
                this.cancellationToken = cancellationToken;
                this.firstCall         = publishCurrentValue;

                parent.triggerEvent.Add(this);
                TaskTracker.TrackActiveTask(this, 3);

                if (cancellationToken.CanBeCanceled)
                {
                    cancellationTokenRegistration = cancellationToken.RegisterWithoutCaptureExecutionContext(cancellationCallback, this);
                }
            }
示例#18
0
 public void Dispose()
 {
     if (!isDisposed)
     {
         isDisposed = true;
         TaskTracker.RemoveTracking(this);
         registration.Dispose();
         if (unityEvent != null)
         {
             unityEvent.RemoveListener(action);
         }
         core.TrySetCanceled(cancellationToken);
     }
 }
示例#19
0
            public static IUniTaskSource Create(CancellationToken cancellationToken, PlayerLoopTiming timing, out short token)
            {
                if (cancellationToken.IsCancellationRequested)
                {
                    return(AutoResetUniTaskCompletionSource.CreateFromCanceled(cancellationToken, out token));
                }

                var result = pool.TryRent() ?? new WaitUntilCanceledPromise();

                result.cancellationToken = cancellationToken;

                TaskTracker.TrackActiveTask(result, 3);

                PlayerLoopHelper.AddAction(timing, result);

                token = result.core.Version;
                return(result);
            }
示例#20
0
            UniTaskCompletionSourceCore <T[]> core; // don't reset(called after GetResult, will invoke TrySetException.)

            public WhenAllPromise(UniTask <T>[] tasks, int tasksLength)
            {
                TaskTracker.TrackActiveTask(this, 3);

                this.completeCount = 0;

                if (tasksLength == 0)
                {
                    this.result = Array.Empty <T>();
                    core.TrySetResult(result);
                    return;
                }

                this.result = new T[tasksLength];

                for (int i = 0; i < tasksLength; i++)
                {
                    UniTask <T> .Awaiter awaiter;
                    try
                    {
                        awaiter = tasks[i].GetAwaiter();
                    }
                    catch (Exception ex)
                    {
                        core.TrySetException(ex);
                        continue;
                    }

                    if (awaiter.IsCompleted)
                    {
                        TryInvokeContinuation(this, awaiter, i);
                    }
                    else
                    {
                        awaiter.SourceOnCompleted(state =>
                        {
                            using (var t = (StateTuple <WhenAllPromise <T>, UniTask <T> .Awaiter, int>)state)
                            {
                                TryInvokeContinuation(t.Item1, t.Item2, t.Item3);
                            }
                        }, StateTuple.Create(this, awaiter, i));
                    }
                }
            }
            public static StoppableDelayRealtimePromise Create(TimeSpan delayTimeSpan, PlayerLoopTiming timing, CancellationToken cancellationToken, out short token)
            {
                if (!pool.TryPop(out var result))
                {
                    result = new StoppableDelayRealtimePromise();
                }

                result.stopwatch          = ValueStopwatch.StartNew();
                result.delayTimeSpanTicks = delayTimeSpan.Ticks;
                result.cancellationToken  = cancellationToken;
                result.externalStop       = false;

                TaskTracker.TrackActiveTask(result, 3);

                PlayerLoopHelper.AddAction(timing, result);

                token = result.core.Version;
                return(result);
            }
示例#22
0
            bool TryReturn()
            {
                TaskTracker.RemoveTracking(this);
                core.Reset();
                tween.onUpdate = originalUpdateAction;

                switch (callbackType)
                {
                case CallbackType.Kill:
                    tween.onKill = originalCompleteAction;
                    break;

                case CallbackType.Complete:
                    tween.onComplete = originalCompleteAction;
                    break;

                case CallbackType.Pause:
                    tween.onPause = originalCompleteAction;
                    break;

                case CallbackType.Play:
                    tween.onPlay = originalCompleteAction;
                    break;

                case CallbackType.Rewind:
                    tween.onRewind = originalCompleteAction;
                    break;

                case CallbackType.StepComplete:
                    tween.onStepComplete = originalCompleteAction;
                    break;

                default:
                    break;
                }

                tween                  = default;
                cancellationToken      = default;
                originalUpdateAction   = default;
                originalCompleteAction = default;
                return(pool.TryPush(this));
            }
示例#23
0
            public static IUniTaskSource Create(Tween tween, TweenCancelBehaviour cancelBehaviour, CancellationToken cancellationToken, out short token)
            {
                if (cancellationToken.IsCancellationRequested)
                {
                    return(AutoResetUniTaskCompletionSource.CreateFromCanceled(cancellationToken, out token));
                }

                var result = pool.TryRent() ?? new TweenConfiguredSource();

                result.tween             = tween;
                result.cancelBehaviour   = cancelBehaviour;
                result.cancellationToken = cancellationToken;

                TaskTracker.TrackActiveTask(result, 3);

                result.RegisterEvent();

                token = result.core.Version;
                return(result);
            }
示例#24
0
            public static IUniTaskSource Create(AsyncOperation asyncOperation, PlayerLoopTiming timing, IProgress <float> progress, CancellationToken cancellationToken, out short token)
            {
                if (cancellationToken.IsCancellationRequested)
                {
                    return(AutoResetUniTaskCompletionSource.CreateFromCanceled(cancellationToken, out token));
                }

                var result = pool.TryRent() ?? new AsyncOperationConfiguredSource();

                result.asyncOperation    = asyncOperation;
                result.progress          = progress;
                result.cancellationToken = cancellationToken;

                TaskTracker.TrackActiveTask(result, 3);

                PlayerLoopHelper.AddAction(timing, result);

                token = result.core.Version;
                return(result);
            }
示例#25
0
            public static IUniTaskSource Create(TimeSpan delayFrameTimeSpan, PlayerLoopTiming timing, CancellationToken cancellationToken, out short token)
            {
                if (cancellationToken.IsCancellationRequested)
                {
                    return(AutoResetUniTaskCompletionSource.CreateFromCanceled(cancellationToken, out token));
                }

                var result = pool.TryRent() ?? new DelayIgnoreTimeScalePromise();

                result.elapsed            = 0.0f;
                result.delayFrameTimeSpan = (float)delayFrameTimeSpan.TotalSeconds;
                result.cancellationToken  = cancellationToken;

                TaskTracker.TrackActiveTask(result, 3);

                PlayerLoopHelper.AddAction(timing, result);

                token = result.core.Version;
                return(result);
            }
示例#26
0
            public static IUniTaskSource Create(IEnumerator innerEnumerator, PlayerLoopTiming timing, CancellationToken cancellationToken, out short token)
            {
                if (cancellationToken.IsCancellationRequested)
                {
                    return(AutoResetUniTaskCompletionSource.CreateFromCanceled(cancellationToken, out token));
                }

                if (!pool.TryPop(out var result))
                {
                    result = new EnumeratorPromise();
                }
                TaskTracker.TrackActiveTask(result, 3);

                result.innerEnumerator   = ConsumeEnumerator(innerEnumerator);
                result.cancellationToken = cancellationToken;

                PlayerLoopHelper.AddAction(timing, result);

                token = result.core.Version;
                return(result);
            }
示例#27
0
            public static IUniTaskSource Create(MonoBehaviour coroutineRunner, CancellationToken cancellationToken, out short token)
            {
                if (cancellationToken.IsCancellationRequested)
                {
                    return(AutoResetUniTaskCompletionSource.CreateFromCanceled(cancellationToken, out token));
                }

                if (!pool.TryPop(out var result))
                {
                    result = new WaitForEndOfFramePromise();
                }

                result.cancellationToken = cancellationToken;

                TaskTracker.TrackActiveTask(result, 3);

                coroutineRunner.StartCoroutine(result);

                token = result.core.Version;
                return(result);
            }
示例#28
0
            public static IUniTaskSource <AsyncGPUReadbackRequest> Create(AsyncGPUReadbackRequest asyncOperation, PlayerLoopTiming timing, CancellationToken cancellationToken, out short token)
            {
                if (cancellationToken.IsCancellationRequested)
                {
                    return(AutoResetUniTaskCompletionSource <AsyncGPUReadbackRequest> .CreateFromCanceled(cancellationToken, out token));
                }

                if (!pool.TryPop(out var result))
                {
                    result = new AsyncGPUReadbackRequestAwaiterConfiguredSource();
                }

                result.asyncOperation    = asyncOperation;
                result.cancellationToken = cancellationToken;

                TaskTracker.TrackActiveTask(result, 3);

                PlayerLoopHelper.AddAction(timing, result);

                token = result.core.Version;
                return(result);
            }
            public static IUniTaskSource Create(int delayFrameCount, PlayerLoopTiming timing, CancellationToken cancellationToken, out short token)
            {
                if (cancellationToken.IsCancellationRequested)
                {
                    return(AutoResetUniTaskCompletionSource.CreateFromCanceled(cancellationToken, out token));
                }

                if (!pool.TryPop(out var result))
                {
                    result = new DelayFramePromise();
                }

                result.delayFrameCount   = delayFrameCount;
                result.cancellationToken = cancellationToken;

                TaskTracker.TrackActiveTask(result, 3);

                PlayerLoopHelper.AddAction(timing, result);

                token = result.core.Version;
                return(result);
            }
            public static IUniTaskSource Create(Func <bool> predicate, PlayerLoopTiming timing, CancellationToken cancellationToken, out short token)
            {
                if (cancellationToken.IsCancellationRequested)
                {
                    return(AutoResetUniTaskCompletionSource.CreateFromCanceled(cancellationToken, out token));
                }

                if (!pool.TryPop(out var result))
                {
                    result = new WaitUntilPromise();
                }

                result.predicate         = predicate;
                result.cancellationToken = cancellationToken;

                TaskTracker.TrackActiveTask(result, 3);

                PlayerLoopHelper.AddAction(timing, result);

                token = result.core.Version;
                return(result);
            }