123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289 |
- #pragma warning disable CS1591 // Missing XML comment for publicly visible type or member
- using System;
- using System.Threading;
- namespace Cysharp.Threading.Tasks
- {
- public partial struct UniTask
- {
- #region OBSOLETE_RUN
- [Obsolete("UniTask.Run is similar as Task.Run, it uses ThreadPool. For equivalent behaviour, use UniTask.RunOnThreadPool instead. If you don't want to use ThreadPool, you can use UniTask.Void(async void) or UniTask.Create(async UniTask) too.")]
- public static UniTask Run(Action action, bool configureAwait = true, CancellationToken cancellationToken = default)
- {
- return RunOnThreadPool(action, configureAwait, cancellationToken);
- }
- [Obsolete("UniTask.Run is similar as Task.Run, it uses ThreadPool. For equivalent behaviour, use UniTask.RunOnThreadPool instead. If you don't want to use ThreadPool, you can use UniTask.Void(async void) or UniTask.Create(async UniTask) too.")]
- public static UniTask Run(Action<object> action, object state, bool configureAwait = true, CancellationToken cancellationToken = default)
- {
- return RunOnThreadPool(action, state, configureAwait, cancellationToken);
- }
- [Obsolete("UniTask.Run is similar as Task.Run, it uses ThreadPool. For equivalent behaviour, use UniTask.RunOnThreadPool instead. If you don't want to use ThreadPool, you can use UniTask.Void(async void) or UniTask.Create(async UniTask) too.")]
- public static UniTask Run(Func<UniTask> action, bool configureAwait = true, CancellationToken cancellationToken = default)
- {
- return RunOnThreadPool(action, configureAwait, cancellationToken);
- }
- [Obsolete("UniTask.Run is similar as Task.Run, it uses ThreadPool. For equivalent behaviour, use UniTask.RunOnThreadPool instead. If you don't want to use ThreadPool, you can use UniTask.Void(async void) or UniTask.Create(async UniTask) too.")]
- public static UniTask Run(Func<object, UniTask> action, object state, bool configureAwait = true, CancellationToken cancellationToken = default)
- {
- return RunOnThreadPool(action, state, configureAwait, cancellationToken);
- }
- [Obsolete("UniTask.Run is similar as Task.Run, it uses ThreadPool. For equivalent behaviour, use UniTask.RunOnThreadPool instead. If you don't want to use ThreadPool, you can use UniTask.Void(async void) or UniTask.Create(async UniTask) too.")]
- public static UniTask<T> Run<T>(Func<T> func, bool configureAwait = true, CancellationToken cancellationToken = default)
- {
- return RunOnThreadPool(func, configureAwait, cancellationToken);
- }
- [Obsolete("UniTask.Run is similar as Task.Run, it uses ThreadPool. For equivalent behaviour, use UniTask.RunOnThreadPool instead. If you don't want to use ThreadPool, you can use UniTask.Void(async void) or UniTask.Create(async UniTask) too.")]
- public static UniTask<T> Run<T>(Func<UniTask<T>> func, bool configureAwait = true, CancellationToken cancellationToken = default)
- {
- return RunOnThreadPool(func, configureAwait, cancellationToken);
- }
- [Obsolete("UniTask.Run is similar as Task.Run, it uses ThreadPool. For equivalent behaviour, use UniTask.RunOnThreadPool instead. If you don't want to use ThreadPool, you can use UniTask.Void(async void) or UniTask.Create(async UniTask) too.")]
- public static UniTask<T> Run<T>(Func<object, T> func, object state, bool configureAwait = true, CancellationToken cancellationToken = default)
- {
- return RunOnThreadPool(func, state, configureAwait, cancellationToken);
- }
- [Obsolete("UniTask.Run is similar as Task.Run, it uses ThreadPool. For equivalent behaviour, use UniTask.RunOnThreadPool instead. If you don't want to use ThreadPool, you can use UniTask.Void(async void) or UniTask.Create(async UniTask) too.")]
- public static UniTask<T> Run<T>(Func<object, UniTask<T>> func, object state, bool configureAwait = true, CancellationToken cancellationToken = default)
- {
- return RunOnThreadPool(func, state, configureAwait, cancellationToken);
- }
- #endregion
- /// <summary>Run action on the threadPool and return to main thread if configureAwait = true.</summary>
- public static async UniTask RunOnThreadPool(Action action, bool configureAwait = true, CancellationToken cancellationToken = default)
- {
- cancellationToken.ThrowIfCancellationRequested();
- await UniTask.SwitchToThreadPool();
- cancellationToken.ThrowIfCancellationRequested();
- if (configureAwait)
- {
- try
- {
- action();
- }
- finally
- {
- await UniTask.Yield();
- }
- }
- else
- {
- action();
- }
- cancellationToken.ThrowIfCancellationRequested();
- }
- /// <summary>Run action on the threadPool and return to main thread if configureAwait = true.</summary>
- public static async UniTask RunOnThreadPool(Action<object> action, object state, bool configureAwait = true, CancellationToken cancellationToken = default)
- {
- cancellationToken.ThrowIfCancellationRequested();
- await UniTask.SwitchToThreadPool();
- cancellationToken.ThrowIfCancellationRequested();
- if (configureAwait)
- {
- try
- {
- action(state);
- }
- finally
- {
- await UniTask.Yield();
- }
- }
- else
- {
- action(state);
- }
- cancellationToken.ThrowIfCancellationRequested();
- }
- /// <summary>Run action on the threadPool and return to main thread if configureAwait = true.</summary>
- public static async UniTask RunOnThreadPool(Func<UniTask> action, bool configureAwait = true, CancellationToken cancellationToken = default)
- {
- cancellationToken.ThrowIfCancellationRequested();
- await UniTask.SwitchToThreadPool();
- cancellationToken.ThrowIfCancellationRequested();
- if (configureAwait)
- {
- try
- {
- await action();
- }
- finally
- {
- await UniTask.Yield();
- }
- }
- else
- {
- await action();
- }
- cancellationToken.ThrowIfCancellationRequested();
- }
- /// <summary>Run action on the threadPool and return to main thread if configureAwait = true.</summary>
- public static async UniTask RunOnThreadPool(Func<object, UniTask> action, object state, bool configureAwait = true, CancellationToken cancellationToken = default)
- {
- cancellationToken.ThrowIfCancellationRequested();
- await UniTask.SwitchToThreadPool();
- cancellationToken.ThrowIfCancellationRequested();
- if (configureAwait)
- {
- try
- {
- await action(state);
- }
- finally
- {
- await UniTask.Yield();
- }
- }
- else
- {
- await action(state);
- }
- cancellationToken.ThrowIfCancellationRequested();
- }
- /// <summary>Run action on the threadPool and return to main thread if configureAwait = true.</summary>
- public static async UniTask<T> RunOnThreadPool<T>(Func<T> func, bool configureAwait = true, CancellationToken cancellationToken = default)
- {
- cancellationToken.ThrowIfCancellationRequested();
- await UniTask.SwitchToThreadPool();
- cancellationToken.ThrowIfCancellationRequested();
- if (configureAwait)
- {
- try
- {
- return func();
- }
- finally
- {
- await UniTask.Yield();
- cancellationToken.ThrowIfCancellationRequested();
- }
- }
- else
- {
- return func();
- }
- }
- /// <summary>Run action on the threadPool and return to main thread if configureAwait = true.</summary>
- public static async UniTask<T> RunOnThreadPool<T>(Func<UniTask<T>> func, bool configureAwait = true, CancellationToken cancellationToken = default)
- {
- cancellationToken.ThrowIfCancellationRequested();
- await UniTask.SwitchToThreadPool();
- cancellationToken.ThrowIfCancellationRequested();
- if (configureAwait)
- {
- try
- {
- return await func();
- }
- finally
- {
- cancellationToken.ThrowIfCancellationRequested();
- await UniTask.Yield();
- cancellationToken.ThrowIfCancellationRequested();
- }
- }
- else
- {
- var result = await func();
- cancellationToken.ThrowIfCancellationRequested();
- return result;
- }
- }
- /// <summary>Run action on the threadPool and return to main thread if configureAwait = true.</summary>
- public static async UniTask<T> RunOnThreadPool<T>(Func<object, T> func, object state, bool configureAwait = true, CancellationToken cancellationToken = default)
- {
- cancellationToken.ThrowIfCancellationRequested();
- await UniTask.SwitchToThreadPool();
- cancellationToken.ThrowIfCancellationRequested();
- if (configureAwait)
- {
- try
- {
- return func(state);
- }
- finally
- {
- await UniTask.Yield();
- cancellationToken.ThrowIfCancellationRequested();
- }
- }
- else
- {
- return func(state);
- }
- }
- /// <summary>Run action on the threadPool and return to main thread if configureAwait = true.</summary>
- public static async UniTask<T> RunOnThreadPool<T>(Func<object, UniTask<T>> func, object state, bool configureAwait = true, CancellationToken cancellationToken = default)
- {
- cancellationToken.ThrowIfCancellationRequested();
- await UniTask.SwitchToThreadPool();
- cancellationToken.ThrowIfCancellationRequested();
- if (configureAwait)
- {
- try
- {
- return await func(state);
- }
- finally
- {
- cancellationToken.ThrowIfCancellationRequested();
- await UniTask.Yield();
- cancellationToken.ThrowIfCancellationRequested();
- }
- }
- else
- {
- var result = await func(state);
- cancellationToken.ThrowIfCancellationRequested();
- return result;
- }
- }
- }
- }
|