mirror of https://github.com/Cysharp/UniTask
feat(UniTaskWithToken): ✨ add Wrap methods
parent
788dc9bd32
commit
d356cf339c
|
@ -1,6 +1,18 @@
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.Rendering;
|
||||||
|
#if ENABLE_UNITYWEBREQUEST && (!UNITY_2019_1_OR_NEWER || UNITASK_WEBREQUEST_SUPPORT)
|
||||||
|
using UnityEngine.Networking;
|
||||||
|
#endif
|
||||||
|
#if UNITASK_ADDRESSABLE_SUPPORT
|
||||||
|
using UnityEngine.ResourceManagement.AsyncOperations;
|
||||||
|
#endif
|
||||||
|
#if UNITASK_DOTWEEN_SUPPORT
|
||||||
|
using DG.Tweening;
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace Cysharp.Threading.Tasks
|
namespace Cysharp.Threading.Tasks
|
||||||
{
|
{
|
||||||
|
@ -12,10 +24,13 @@ namespace Cysharp.Threading.Tasks
|
||||||
#region UniTask.Delay
|
#region UniTask.Delay
|
||||||
public UniTask Yield(PlayerLoopTiming timing = PlayerLoopTiming.Update)
|
public UniTask Yield(PlayerLoopTiming timing = PlayerLoopTiming.Update)
|
||||||
=> UniTask.Yield(timing, cancellationToken);
|
=> UniTask.Yield(timing, cancellationToken);
|
||||||
|
/// <summary>Similar as UniTask.Yield but guaranteed run on next frame.</summary>
|
||||||
public UniTask NextFrame(PlayerLoopTiming timing = PlayerLoopTiming.Update)
|
public UniTask NextFrame(PlayerLoopTiming timing = PlayerLoopTiming.Update)
|
||||||
=> UniTask.NextFrame(timing, cancellationToken);
|
=> UniTask.NextFrame(timing, cancellationToken);
|
||||||
|
/// <summary>Same as UniTask.Yield(PlayerLoopTiming.LastPostLateUpdate, cancellationToken).</summary>
|
||||||
public UniTask WaitForEndOfFrame()
|
public UniTask WaitForEndOfFrame()
|
||||||
=> UniTask.WaitForEndOfFrame(cancellationToken);
|
=> UniTask.WaitForEndOfFrame(cancellationToken);
|
||||||
|
/// <summary>Same as UniTask.Yield(PlayerLoopTiming.FixedUpdate, cancellationToken).</summary>
|
||||||
public UniTask WaitForFixedUpdate()
|
public UniTask WaitForFixedUpdate()
|
||||||
=> UniTask.WaitForFixedUpdate(cancellationToken);
|
=> UniTask.WaitForFixedUpdate(cancellationToken);
|
||||||
public UniTask DelayFrame(int delayFrameCount, PlayerLoopTiming delayTiming = PlayerLoopTiming.Update)
|
public UniTask DelayFrame(int delayFrameCount, PlayerLoopTiming delayTiming = PlayerLoopTiming.Update)
|
||||||
|
@ -34,45 +49,62 @@ namespace Cysharp.Threading.Tasks
|
||||||
=> UniTask.FromCanceled(cancellationToken);
|
=> UniTask.FromCanceled(cancellationToken);
|
||||||
public UniTask<T> FromCanceled<T>()
|
public UniTask<T> FromCanceled<T>()
|
||||||
=> UniTask.FromCanceled<T>(cancellationToken);
|
=> UniTask.FromCanceled<T>(cancellationToken);
|
||||||
|
/// <summary>helper of fire and forget void action.</summary>
|
||||||
public void Void(Func<CancellationToken, UniTaskVoid> asyncAction)
|
public void Void(Func<CancellationToken, UniTaskVoid> asyncAction)
|
||||||
=> UniTask.Void(asyncAction, cancellationToken);
|
=> UniTask.Void(asyncAction, cancellationToken);
|
||||||
|
/// <summary>helper of create add UniTaskVoid to delegate.</summary>
|
||||||
public Action Action(Func<CancellationToken, UniTaskVoid> asyncAction)
|
public Action Action(Func<CancellationToken, UniTaskVoid> asyncAction)
|
||||||
=> UniTask.Action(asyncAction, cancellationToken);
|
=> UniTask.Action(asyncAction, cancellationToken);
|
||||||
#if UNITY_2018_3_OR_NEWER
|
#if UNITY_2018_3_OR_NEWER
|
||||||
|
/// <summary>Create async void(UniTaskVoid) UnityAction.</summary>
|
||||||
public UnityEngine.Events.UnityAction UnityAction(Func<CancellationToken, UniTaskVoid> asyncAction)
|
public UnityEngine.Events.UnityAction UnityAction(Func<CancellationToken, UniTaskVoid> asyncAction)
|
||||||
=> UniTask.UnityAction(asyncAction, cancellationToken);
|
=> UniTask.UnityAction(asyncAction, cancellationToken);
|
||||||
#endif
|
#endif
|
||||||
|
/// <summary>Never complete.</summary>
|
||||||
public UniTask Never()
|
public UniTask Never()
|
||||||
=> UniTask.Never(cancellationToken);
|
=> UniTask.Never(cancellationToken);
|
||||||
|
/// <summary>Never complete.</summary>
|
||||||
public UniTask<T> Never<T>()
|
public UniTask<T> Never<T>()
|
||||||
=> UniTask.Never<T>(cancellationToken);
|
=> UniTask.Never<T>(cancellationToken);
|
||||||
#endregion
|
#endregion
|
||||||
#region UniTask.Run
|
#region UniTask.Run
|
||||||
|
/// <summary>Run action on the threadPool and return to main thread if configureAwait = true.</summary>
|
||||||
public async UniTask RunOnThreadPool(Action action, bool configureAwait = true)
|
public async UniTask RunOnThreadPool(Action action, bool configureAwait = true)
|
||||||
=> await UniTask.RunOnThreadPool(action, configureAwait, cancellationToken);
|
=> await UniTask.RunOnThreadPool(action, configureAwait, cancellationToken);
|
||||||
|
/// <summary>Run action on the threadPool and return to main thread if configureAwait = true.</summary>
|
||||||
public async UniTask RunOnThreadPool(Action<object> action, object state, bool configureAwait = true)
|
public async UniTask RunOnThreadPool(Action<object> action, object state, bool configureAwait = true)
|
||||||
=> await UniTask.RunOnThreadPool(action, state, configureAwait, cancellationToken);
|
=> await UniTask.RunOnThreadPool(action, state, configureAwait, cancellationToken);
|
||||||
|
/// <summary>Run action on the threadPool and return to main thread if configureAwait = true.</summary>
|
||||||
public async UniTask RunOnThreadPool(Func<UniTask> action, bool configureAwait = true)
|
public async UniTask RunOnThreadPool(Func<UniTask> action, bool configureAwait = true)
|
||||||
=> await UniTask.RunOnThreadPool(action, configureAwait, cancellationToken);
|
=> await UniTask.RunOnThreadPool(action, configureAwait, cancellationToken);
|
||||||
|
/// <summary>Run action on the threadPool and return to main thread if configureAwait = true.</summary>
|
||||||
public async UniTask RunOnThreadPool(Func<object, UniTask> action, object state, bool configureAwait = true)
|
public async UniTask RunOnThreadPool(Func<object, UniTask> action, object state, bool configureAwait = true)
|
||||||
=> await UniTask.RunOnThreadPool(action, state, configureAwait, cancellationToken);
|
=> await UniTask.RunOnThreadPool(action, state, configureAwait, cancellationToken);
|
||||||
|
/// <summary>Run action on the threadPool and return to main thread if configureAwait = true.</summary>
|
||||||
public async UniTask<T> RunOnThreadPool<T>(Func<T> func, bool configureAwait = true)
|
public async UniTask<T> RunOnThreadPool<T>(Func<T> func, bool configureAwait = true)
|
||||||
=> await UniTask.RunOnThreadPool(func, configureAwait, cancellationToken);
|
=> await UniTask.RunOnThreadPool(func, configureAwait, cancellationToken);
|
||||||
|
/// <summary>Run action on the threadPool and return to main thread if configureAwait = true.</summary>
|
||||||
public async UniTask<T> RunOnThreadPool<T>(Func<UniTask<T>> func, bool configureAwait = true)
|
public async UniTask<T> RunOnThreadPool<T>(Func<UniTask<T>> func, bool configureAwait = true)
|
||||||
=> await UniTask.RunOnThreadPool(func, configureAwait, cancellationToken);
|
=> await UniTask.RunOnThreadPool(func, configureAwait, cancellationToken);
|
||||||
|
/// <summary>Run action on the threadPool and return to main thread if configureAwait = true.</summary>
|
||||||
public async UniTask<T> RunOnThreadPool<T>(Func<object, T> func, object state, bool configureAwait = true)
|
public async UniTask<T> RunOnThreadPool<T>(Func<object, T> func, object state, bool configureAwait = true)
|
||||||
=> await UniTask.RunOnThreadPool(func, state, configureAwait, cancellationToken);
|
=> await UniTask.RunOnThreadPool(func, state, configureAwait, cancellationToken);
|
||||||
|
/// <summary>Run action on the threadPool and return to main thread if configureAwait = true.</summary>
|
||||||
public async UniTask<T> RunOnThreadPool<T>(Func<object, UniTask<T>> func, object state, bool configureAwait = true)
|
public async UniTask<T> RunOnThreadPool<T>(Func<object, UniTask<T>> func, object state, bool configureAwait = true)
|
||||||
=> await UniTask.RunOnThreadPool(func, state, configureAwait, cancellationToken);
|
=> await UniTask.RunOnThreadPool(func, state, configureAwait, cancellationToken);
|
||||||
#endregion
|
#endregion
|
||||||
#region UniTask.Threading
|
#region UniTask.Threading
|
||||||
#if UNITY_2018_3_OR_NEWER
|
#if UNITY_2018_3_OR_NEWER
|
||||||
|
/// <summary>If running on mainthread, do nothing. Otherwise, same as UniTask.Yield(PlayerLoopTiming.Update, cancellationToken).</summary>
|
||||||
public SwitchToMainThreadAwaitable SwitchToMainThread()
|
public SwitchToMainThreadAwaitable SwitchToMainThread()
|
||||||
=> UniTask.SwitchToMainThread(cancellationToken);
|
=> UniTask.SwitchToMainThread(cancellationToken);
|
||||||
|
/// <summary>If running on mainthread, do nothing. Otherwise, same as UniTask.Yield(timing, cancellationToken).</summary>
|
||||||
public SwitchToMainThreadAwaitable SwitchToMainThread(PlayerLoopTiming timing)
|
public SwitchToMainThreadAwaitable SwitchToMainThread(PlayerLoopTiming timing)
|
||||||
=> UniTask.SwitchToMainThread(timing, cancellationToken);
|
=> UniTask.SwitchToMainThread(timing, cancellationToken);
|
||||||
|
/// <summary>Return to mainthread(same as await SwitchToMainThread) after using scope is closed.</summary>
|
||||||
public ReturnToMainThread ReturnToMainThread()
|
public ReturnToMainThread ReturnToMainThread()
|
||||||
=> UniTask.ReturnToMainThread(cancellationToken);
|
=> UniTask.ReturnToMainThread(cancellationToken);
|
||||||
|
/// <summary>Return to mainthread(same as await SwitchToMainThread) after using scope is closed.</summary>
|
||||||
public ReturnToMainThread ReturnToMainThread(PlayerLoopTiming timing)
|
public ReturnToMainThread ReturnToMainThread(PlayerLoopTiming timing)
|
||||||
=> UniTask.ReturnToMainThread(timing, cancellationToken);
|
=> UniTask.ReturnToMainThread(timing, cancellationToken);
|
||||||
#endif
|
#endif
|
||||||
|
@ -91,5 +123,43 @@ namespace Cysharp.Threading.Tasks
|
||||||
public UniTask<U> WaitUntilValueChanged<T, U>(T target, Func<T, U> monitorFunction, PlayerLoopTiming monitorTiming = PlayerLoopTiming.Update, IEqualityComparer<U> equalityComparer = null) where T : class
|
public UniTask<U> WaitUntilValueChanged<T, U>(T target, Func<T, U> monitorFunction, PlayerLoopTiming monitorTiming = PlayerLoopTiming.Update, IEqualityComparer<U> equalityComparer = null) where T : class
|
||||||
=> UniTask.WaitUntilValueChanged(target, monitorFunction, monitorTiming, equalityComparer, cancellationToken);
|
=> UniTask.WaitUntilValueChanged(target, monitorFunction, monitorTiming, equalityComparer, cancellationToken);
|
||||||
#endregion
|
#endregion
|
||||||
|
#region Wrap
|
||||||
|
public UniTask Wrap(IEnumerator enumerator)
|
||||||
|
=> enumerator.WithCancellation(cancellationToken);
|
||||||
|
public UniTaskCancelableAsyncEnumerable<T> Wrap<T>(IUniTaskAsyncEnumerable<T> source)
|
||||||
|
=> source.WithCancellation(cancellationToken);
|
||||||
|
/// <summary>Ignore task result when cancel raised first.</summary>
|
||||||
|
public UniTask Wrap(UniTask task)
|
||||||
|
=> task.WithCancellation(cancellationToken);
|
||||||
|
/// <summary>Ignore task result when cancel raised first.</summary>
|
||||||
|
public UniTask<T> Wrap<T>(UniTask<T> task)
|
||||||
|
=> task.WithCancellation(cancellationToken);
|
||||||
|
public UniTask<AsyncGPUReadbackRequest> Wrap(AsyncGPUReadbackRequest asyncOperation)
|
||||||
|
=> asyncOperation.WithCancellation(cancellationToken);
|
||||||
|
public UniTask Wrap(AsyncOperation asyncOperation)
|
||||||
|
=> asyncOperation.WithCancellation(cancellationToken);
|
||||||
|
public UniTask<UnityEngine.Object> Wrap(ResourceRequest asyncOperation)
|
||||||
|
=> asyncOperation.WithCancellation(cancellationToken);
|
||||||
|
#if UNITASK_ASSETBUNDLE_SUPPORT
|
||||||
|
public UniTask<UnityEngine.Object> Wrap(AssetBundleRequest asyncOperation)
|
||||||
|
=> asyncOperation.WithCancellation(cancellationToken);
|
||||||
|
#endif
|
||||||
|
#if UNITASK_ASSETBUNDLE_SUPPORT
|
||||||
|
public UniTask<AssetBundle> Wrap(AssetBundleCreateRequest asyncOperation)
|
||||||
|
=> asyncOperation.WithCancellation(cancellationToken);
|
||||||
|
#endif
|
||||||
|
#if ENABLE_UNITYWEBREQUEST && (!UNITY_2019_1_OR_NEWER || UNITASK_WEBREQUEST_SUPPORT)
|
||||||
|
public UniTask<UnityWebRequest> Wrap(UnityWebRequestAsyncOperation asyncOperation)
|
||||||
|
=> asyncOperation.WithCancellation(cancellationToken);
|
||||||
|
#endif
|
||||||
|
#if UNITASK_ADDRESSABLE_SUPPORT
|
||||||
|
public static UniTask Wrap(AsyncOperationHandle handle)
|
||||||
|
=> handle.WithCancellation(cancellationToken);
|
||||||
|
#endif
|
||||||
|
#if UNITASK_DOTWEEN_SUPPORT
|
||||||
|
public static UniTask Wrap(Tween tween)
|
||||||
|
=> tween.WithCancellation(cancellationToken);
|
||||||
|
#endif
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue