mirror of
https://github.com/Cysharp/UniTask.git
synced 2026-05-17 04:30:13 +00:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3bebaef969 | ||
|
|
37e8b4500e | ||
|
|
8537ddf8a6 |
@@ -908,7 +908,7 @@ After Unity 2019.3.4f1, Unity 2020.1a21, that support path query parameter of gi
|
|||||||
|
|
||||||
or add `"com.cysharp.unitask": "https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask"` to `Packages/manifest.json`.
|
or add `"com.cysharp.unitask": "https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask"` to `Packages/manifest.json`.
|
||||||
|
|
||||||
If you want to set a target version, UniTask is using `*.*.*` release tag so you can specify a version like `#2.0.35`. For example `https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask#2.0.35`.
|
If you want to set a target version, UniTask is using `*.*.*` release tag so you can specify a version like `#2.0.36`. For example `https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask#2.0.36`.
|
||||||
|
|
||||||
### Install via OpenUPM
|
### Install via OpenUPM
|
||||||
|
|
||||||
|
|||||||
@@ -32,6 +32,19 @@ namespace Cysharp.Threading.Tasks
|
|||||||
return new UniTask(EnumeratorPromise.Create(enumerator, timing, cancellationToken, out var token), token);
|
return new UniTask(EnumeratorPromise.Create(enumerator, timing, cancellationToken, out var token), token);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static UniTask ToUniTask(this IEnumerator enumerator, MonoBehaviour coroutineRunner)
|
||||||
|
{
|
||||||
|
var source = AutoResetUniTaskCompletionSource.Create();
|
||||||
|
coroutineRunner.StartCoroutine(Core(enumerator, coroutineRunner, source));
|
||||||
|
return source.Task;
|
||||||
|
}
|
||||||
|
|
||||||
|
static IEnumerator Core(IEnumerator inner, MonoBehaviour coroutineRunner, AutoResetUniTaskCompletionSource source)
|
||||||
|
{
|
||||||
|
yield return coroutineRunner.StartCoroutine(inner);
|
||||||
|
source.TrySetResult();
|
||||||
|
}
|
||||||
|
|
||||||
sealed class EnumeratorPromise : IUniTaskSource, IPlayerLoopItem, ITaskPoolNode<EnumeratorPromise>
|
sealed class EnumeratorPromise : IUniTaskSource, IPlayerLoopItem, ITaskPoolNode<EnumeratorPromise>
|
||||||
{
|
{
|
||||||
static TaskPool<EnumeratorPromise> pool;
|
static TaskPool<EnumeratorPromise> pool;
|
||||||
@@ -215,7 +228,7 @@ namespace Cysharp.Threading.Tasks
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
yield return null;
|
goto WARN;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (current is IEnumerator e3)
|
else if (current is IEnumerator e3)
|
||||||
@@ -228,9 +241,15 @@ namespace Cysharp.Threading.Tasks
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// WaitForEndOfFrame, WaitForFixedUpdate, others.
|
goto WARN;
|
||||||
yield return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
continue;
|
||||||
|
|
||||||
|
WARN:
|
||||||
|
// WaitForEndOfFrame, WaitForFixedUpdate, others.
|
||||||
|
UnityEngine.Debug.LogWarning($"yield {current.GetType().Name} is not supported on await IEnumerator or IEnumerator.ToUniTask(), please use ToUniTask(MonoBehaviour coroutineRunner) instead.");
|
||||||
|
yield return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -262,4 +281,3 @@ namespace Cysharp.Threading.Tasks
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -561,21 +561,23 @@ namespace Cysharp.Threading.Tasks
|
|||||||
UniTaskScheduler.PublishUnobservedTaskException(ex);
|
UniTaskScheduler.PublishUnobservedTaskException(ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
awaiter.SourceOnCompleted(state =>
|
|
||||||
{
|
{
|
||||||
using (var t = (StateTuple<UniTask.Awaiter>)state)
|
awaiter.SourceOnCompleted(state =>
|
||||||
{
|
{
|
||||||
try
|
using (var t = (StateTuple<UniTask.Awaiter>)state)
|
||||||
{
|
{
|
||||||
t.Item1.GetResult();
|
try
|
||||||
|
{
|
||||||
|
t.Item1.GetResult();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
UniTaskScheduler.PublishUnobservedTaskException(ex);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
}, StateTuple.Create(awaiter));
|
||||||
{
|
}
|
||||||
UniTaskScheduler.PublishUnobservedTaskException(ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, StateTuple.Create(awaiter));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Forget(this UniTask task, Action<Exception> exceptionHandler, bool handleExceptionOnMainThread = true)
|
public static void Forget(this UniTask task, Action<Exception> exceptionHandler, bool handleExceptionOnMainThread = true)
|
||||||
@@ -629,21 +631,23 @@ namespace Cysharp.Threading.Tasks
|
|||||||
UniTaskScheduler.PublishUnobservedTaskException(ex);
|
UniTaskScheduler.PublishUnobservedTaskException(ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
awaiter.SourceOnCompleted(state =>
|
|
||||||
{
|
{
|
||||||
using (var t = (StateTuple<UniTask<T>.Awaiter>)state)
|
awaiter.SourceOnCompleted(state =>
|
||||||
{
|
{
|
||||||
try
|
using (var t = (StateTuple<UniTask<T>.Awaiter>)state)
|
||||||
{
|
{
|
||||||
t.Item1.GetResult();
|
try
|
||||||
|
{
|
||||||
|
t.Item1.GetResult();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
UniTaskScheduler.PublishUnobservedTaskException(ex);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
}, StateTuple.Create(awaiter));
|
||||||
{
|
}
|
||||||
UniTaskScheduler.PublishUnobservedTaskException(ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, StateTuple.Create(awaiter));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Forget<T>(this UniTask<T> task, Action<Exception> exceptionHandler, bool handleExceptionOnMainThread = true)
|
public static void Forget<T>(this UniTask<T> task, Action<Exception> exceptionHandler, bool handleExceptionOnMainThread = true)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "com.cysharp.unitask",
|
"name": "com.cysharp.unitask",
|
||||||
"displayName": "UniTask",
|
"displayName": "UniTask",
|
||||||
"version": "2.0.35",
|
"version": "2.0.36",
|
||||||
"unity": "2018.4",
|
"unity": "2018.4",
|
||||||
"description": "Provides an efficient async/await integration to Unity.",
|
"description": "Provides an efficient async/await integration to Unity.",
|
||||||
"keywords": [ "async/await", "async", "Task", "UniTask" ],
|
"keywords": [ "async/await", "async", "Task", "UniTask" ],
|
||||||
|
|||||||
@@ -507,8 +507,19 @@ public class SandboxMain : MonoBehaviour
|
|||||||
|
|
||||||
CancellationTokenSource quitSource = new CancellationTokenSource();
|
CancellationTokenSource quitSource = new CancellationTokenSource();
|
||||||
|
|
||||||
|
|
||||||
|
IEnumerator TestCor()
|
||||||
|
{
|
||||||
|
Debug.Log("start cor");
|
||||||
|
yield return null;
|
||||||
|
yield return new WaitForEndOfFrame();
|
||||||
|
Debug.Log("end cor");
|
||||||
|
}
|
||||||
|
|
||||||
async UniTaskVoid Start()
|
async UniTaskVoid Start()
|
||||||
{
|
{
|
||||||
|
await TestCor().ToUniTask(this);
|
||||||
|
|
||||||
Debug.Log("App Start");
|
Debug.Log("App Start");
|
||||||
|
|
||||||
Application.quitting += () =>
|
Application.quitting += () =>
|
||||||
|
|||||||
Reference in New Issue
Block a user