public static IUniTaskSource Create(TimeSpan delayFrameTimeSpan, PlayerLoopTiming timing, CancellationToken cancellationToken, out short token) { if (cancellationToken.IsCancellationRequested) { return(AutoResetUniTaskCompletionSource.CreateFromCanceled(cancellationToken, out token)); } if (!pool.TryPop(out var result)) { result = new DelayIgnoreTimeScalePromise(); } result.elapsed = 0.0f; result.delayFrameTimeSpan = (float)delayFrameTimeSpan.TotalSeconds; result.initialFrame = PlayerLoopHelper.IsMainThread ? Time.frameCount : -1; result.cancellationToken = cancellationToken; TaskTracker.TrackActiveTask(result, 3); PlayerLoopHelper.AddAction(timing, result); token = result.core.Version; return(result); }
public static IUniTaskSource Create(AsyncOperationHandle handle, CancellationToken cancellationToken, out short token) { if (cancellationToken.IsCancellationRequested) { return(AutoResetUniTaskCompletionSource.CreateFromCanceled(cancellationToken, out token)); } if (!pool.TryPop(out var result)) { result = new AsyncOperationHandleWithCancellationSource(); } result.handle = handle; result.cancellationToken = cancellationToken; result.completed = false; TaskTracker.TrackActiveTask(result, 3); PlayerLoopHelper.AddAction(PlayerLoopTiming.Update, result); handle.Completed += result.continuationAction; token = result.core.Version; return(result); }
public static IUniTaskSource <UnityEngine.Object[]> Create(AssetBundleRequest asyncOperation, CancellationToken cancellationToken, out short token) { if (cancellationToken.IsCancellationRequested) { return(AutoResetUniTaskCompletionSource <UnityEngine.Object[]> .CreateFromCanceled(cancellationToken, out token)); } if (!pool.TryPop(out var result)) { result = new AssetBundleRequestAllAssetsWithCancellationSource(); } result.asyncOperation = asyncOperation; result.cancellationToken = cancellationToken; result.completed = false; TaskTracker.TrackActiveTask(result, 3); PlayerLoopHelper.AddAction(PlayerLoopTiming.Update, result); asyncOperation.completed += result.continuationAction; token = result.core.Version; return(result); }
public static IUniTaskSource <U> Create(T target, Func <T, U> monitorFunction, IEqualityComparer <U> equalityComparer, PlayerLoopTiming timing, CancellationToken cancellationToken, out short token) { if (cancellationToken.IsCancellationRequested) { return(AutoResetUniTaskCompletionSource <U> .CreateFromCanceled(cancellationToken, out token)); } if (!pool.TryPop(out var result)) { result = new WaitUntilValueChangedStandardObjectPromise <T, U>(); } result.target = new WeakReference <T>(target, false); // wrap in WeakReference. result.monitorFunction = monitorFunction; result.currentValue = monitorFunction(target); result.equalityComparer = equalityComparer ?? UnityEqualityComparer.GetDefault <U>(); result.cancellationToken = cancellationToken; TaskTracker.TrackActiveTask(result, 3); PlayerLoopHelper.AddAction(timing, result); token = result.core.Version; return(result); }
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; result.loopRunning = true; result.calledGetResult = false; result.initialFrame = -1; PlayerLoopHelper.AddAction(timing, result); token = result.core.Version; result.MoveNext(); // run immediately. return(result); }
// can not pass CancellationToken because can't handle JobHandle's Complete and NativeArray.Dispose. public static UniTask ToUniTask(this JobHandle jobHandle, PlayerLoopTiming waitTiming) { var handler = JobHandlePromise.Create(jobHandle, out var token); { PlayerLoopHelper.AddAction(waitTiming, handler); } return(new UniTask(handler, token)); }
public static UniTask.Awaiter GetAwaiter(this JobHandle jobHandle) { var handler = JobHandlePromise.Create(jobHandle, out var token); { PlayerLoopHelper.AddAction(PlayerLoopTiming.EarlyUpdate, handler); PlayerLoopHelper.AddAction(PlayerLoopTiming.PreUpdate, handler); PlayerLoopHelper.AddAction(PlayerLoopTiming.Update, handler); PlayerLoopHelper.AddAction(PlayerLoopTiming.PreLateUpdate, handler); PlayerLoopHelper.AddAction(PlayerLoopTiming.PostLateUpdate, handler); } return(new UniTask(handler, token).GetAwaiter()); }
/// <summary> /// Restart(Reset and Start) and change interval. /// </summary> public void Restart(TimeSpan interval) { if (isDisposed) { throw new ObjectDisposedException(null); } ResetCore(interval); // init state if (!isRunning) { isRunning = true; PlayerLoopHelper.AddAction(playerLoopTiming, this); } tryStop = false; }
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); }
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); }
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 DelayPromise(); 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); }
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); }
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); }
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 <UnityEngine.Object[]> Create(AssetBundleRequest asyncOperation, PlayerLoopTiming timing, IProgress <float> progress, CancellationToken cancellationToken, out short token) { if (cancellationToken.IsCancellationRequested) { return(AutoResetUniTaskCompletionSource <UnityEngine.Object[]> .CreateFromCanceled(cancellationToken, out token)); } if (!pool.TryPop(out var result)) { result = new AssetBundleRequestAllAssetsConfiguredSource(); } result.asyncOperation = asyncOperation; result.progress = progress; result.cancellationToken = cancellationToken; TaskTracker.TrackActiveTask(result, 3); PlayerLoopHelper.AddAction(timing, result); token = result.core.Version; return(result); }
public static IUniTaskSource <U> Create(T target, Func <T, U> monitorFunction, IEqualityComparer <U> equalityComparer, PlayerLoopTiming timing, CancellationToken cancellationToken, out short token) { if (cancellationToken.IsCancellationRequested) { return(AutoResetUniTaskCompletionSource <U> .CreateFromCanceled(cancellationToken, out token)); } var result = pool.TryRent() ?? new WaitUntilValueChangedUnityObjectPromise <T, U>(); result.target = target; result.targetAsUnityObject = target as UnityEngine.Object; result.monitorFunction = monitorFunction; result.currentValue = monitorFunction(target); result.equalityComparer = equalityComparer ?? UnityEqualityComparer.GetDefault <U>(); result.cancellationToken = cancellationToken; TaskTracker.TrackActiveTask(result, 3); PlayerLoopHelper.AddAction(timing, result); token = result.core.Version; return(result); }
public static IUniTaskSource Create(TimeSpan delayTimeSpan, PlayerLoopTiming timing, CancellationToken cancellationToken, out short token) { if (cancellationToken.IsCancellationRequested) { return(AutoResetUniTaskCompletionSource.CreateFromCanceled(cancellationToken, out token)); } if (!pool.TryPop(out var result)) { result = new DelayRealtimePromise(); } result.stopwatch = ValueStopwatch.StartNew(); result.delayTimeSpanTicks = delayTimeSpan.Ticks; result.cancellationToken = cancellationToken; TaskTracker.TrackActiveTask(result, 3); PlayerLoopHelper.AddAction(timing, result); token = result.core.Version; return(result); }