You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
289 lines
11 KiB
289 lines
11 KiB
#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; |
|
} |
|
} |
|
} |
|
} |
|
|
|
|