mirror of
https://github.com/Cysharp/UniTask.git
synced 2026-05-18 21:20:10 +00:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7c0f199fe0 |
@@ -135,8 +135,8 @@ namespace Cysharp.Threading.Tasks
|
|||||||
bool TryReturn()
|
bool TryReturn()
|
||||||
{
|
{
|
||||||
TaskTracker.RemoveTracking(this);
|
TaskTracker.RemoveTracking(this);
|
||||||
cancellationTokenRegistration.Dispose();
|
|
||||||
core.Reset();
|
core.Reset();
|
||||||
|
cancellationTokenRegistration.Dispose();
|
||||||
cancellationTokenRegistration = default;
|
cancellationTokenRegistration = default;
|
||||||
parent.triggerEvent.Remove(this);
|
parent.triggerEvent.Remove(this);
|
||||||
parent = null;
|
parent = null;
|
||||||
@@ -453,8 +453,8 @@ namespace Cysharp.Threading.Tasks
|
|||||||
bool TryReturn()
|
bool TryReturn()
|
||||||
{
|
{
|
||||||
TaskTracker.RemoveTracking(this);
|
TaskTracker.RemoveTracking(this);
|
||||||
cancellationTokenRegistration.Dispose();
|
|
||||||
core.Reset();
|
core.Reset();
|
||||||
|
cancellationTokenRegistration.Dispose();
|
||||||
cancellationTokenRegistration = default;
|
cancellationTokenRegistration = default;
|
||||||
parent.triggerEvent.Remove(this);
|
parent.triggerEvent.Remove(this);
|
||||||
parent = null;
|
parent = null;
|
||||||
|
|||||||
@@ -353,8 +353,8 @@ namespace Cysharp.Threading.Tasks
|
|||||||
bool TryReturn()
|
bool TryReturn()
|
||||||
{
|
{
|
||||||
TaskTracker.RemoveTracking(this);
|
TaskTracker.RemoveTracking(this);
|
||||||
cancellationRegistration.Dispose();
|
|
||||||
core.Reset();
|
core.Reset();
|
||||||
|
cancellationRegistration.Dispose();
|
||||||
|
|
||||||
RestoreOriginalCallback();
|
RestoreOriginalCallback();
|
||||||
|
|
||||||
|
|||||||
@@ -255,7 +255,7 @@ namespace Cysharp.Threading.Tasks
|
|||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
if (!cancellationToken.IsCancellationRequested)
|
if (!(cancelImmediately && cancellationToken.IsCancellationRequested))
|
||||||
{
|
{
|
||||||
TryReturn();
|
TryReturn();
|
||||||
}
|
}
|
||||||
@@ -289,7 +289,6 @@ namespace Cysharp.Threading.Tasks
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
cancellationTokenRegistration.Dispose();
|
|
||||||
core.TrySetResult(null);
|
core.TrySetResult(null);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -297,9 +296,9 @@ namespace Cysharp.Threading.Tasks
|
|||||||
bool TryReturn()
|
bool TryReturn()
|
||||||
{
|
{
|
||||||
TaskTracker.RemoveTracking(this);
|
TaskTracker.RemoveTracking(this);
|
||||||
cancellationTokenRegistration.Dispose();
|
|
||||||
core.Reset();
|
core.Reset();
|
||||||
cancellationToken = default;
|
cancellationToken = default;
|
||||||
|
cancellationTokenRegistration.Dispose();
|
||||||
cancelImmediately = default;
|
cancelImmediately = default;
|
||||||
return pool.TryPush(this);
|
return pool.TryPush(this);
|
||||||
}
|
}
|
||||||
@@ -367,7 +366,7 @@ namespace Cysharp.Threading.Tasks
|
|||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
if (!cancellationToken.IsCancellationRequested)
|
if (!(cancelImmediately && cancellationToken.IsCancellationRequested))
|
||||||
{
|
{
|
||||||
TryReturn();
|
TryReturn();
|
||||||
}
|
}
|
||||||
@@ -413,9 +412,9 @@ namespace Cysharp.Threading.Tasks
|
|||||||
bool TryReturn()
|
bool TryReturn()
|
||||||
{
|
{
|
||||||
TaskTracker.RemoveTracking(this);
|
TaskTracker.RemoveTracking(this);
|
||||||
cancellationTokenRegistration.Dispose();
|
|
||||||
core.Reset();
|
core.Reset();
|
||||||
cancellationToken = default;
|
cancellationToken = default;
|
||||||
|
cancellationTokenRegistration.Dispose();
|
||||||
return pool.TryPush(this);
|
return pool.TryPush(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,7 +42,6 @@ namespace Cysharp.Threading.Tasks
|
|||||||
return new UniTask(AsyncOperationConfiguredSource.Create(asyncOperation, timing, progress, cancellationToken, cancelImmediately, out var token), token);
|
return new UniTask(AsyncOperationConfiguredSource.Create(asyncOperation, timing, progress, cancellationToken, cancelImmediately, out var token), token);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !UNITY_2023_1_OR_NEWER
|
|
||||||
public struct AsyncOperationAwaiter : ICriticalNotifyCompletion
|
public struct AsyncOperationAwaiter : ICriticalNotifyCompletion
|
||||||
{
|
{
|
||||||
AsyncOperation asyncOperation;
|
AsyncOperation asyncOperation;
|
||||||
@@ -82,7 +81,6 @@ namespace Cysharp.Threading.Tasks
|
|||||||
asyncOperation.completed += continuationAction;
|
asyncOperation.completed += continuationAction;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
sealed class AsyncOperationConfiguredSource : IUniTaskSource, IPlayerLoopItem, ITaskPoolNode<AsyncOperationConfiguredSource>
|
sealed class AsyncOperationConfiguredSource : IUniTaskSource, IPlayerLoopItem, ITaskPoolNode<AsyncOperationConfiguredSource>
|
||||||
{
|
{
|
||||||
@@ -101,7 +99,6 @@ namespace Cysharp.Threading.Tasks
|
|||||||
CancellationTokenRegistration cancellationTokenRegistration;
|
CancellationTokenRegistration cancellationTokenRegistration;
|
||||||
bool cancelImmediately;
|
bool cancelImmediately;
|
||||||
bool completed;
|
bool completed;
|
||||||
bool allowReturn;
|
|
||||||
|
|
||||||
UniTaskCompletionSourceCore<AsyncUnit> core;
|
UniTaskCompletionSourceCore<AsyncUnit> core;
|
||||||
|
|
||||||
@@ -129,7 +126,6 @@ namespace Cysharp.Threading.Tasks
|
|||||||
result.cancellationToken = cancellationToken;
|
result.cancellationToken = cancellationToken;
|
||||||
result.cancelImmediately = cancelImmediately;
|
result.cancelImmediately = cancelImmediately;
|
||||||
result.completed = false;
|
result.completed = false;
|
||||||
result.allowReturn = false;
|
|
||||||
|
|
||||||
asyncOperation.completed += result.continuationAction;
|
asyncOperation.completed += result.continuationAction;
|
||||||
|
|
||||||
@@ -158,16 +154,9 @@ namespace Cysharp.Threading.Tasks
|
|||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
if (!cancellationToken.IsCancellationRequested)
|
if (!(cancelImmediately && cancellationToken.IsCancellationRequested))
|
||||||
{
|
{
|
||||||
if (allowReturn)
|
TryReturn();
|
||||||
{
|
|
||||||
TryReturn();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
allowReturn = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -194,15 +183,9 @@ namespace Cysharp.Threading.Tasks
|
|||||||
|
|
||||||
public bool MoveNext()
|
public bool MoveNext()
|
||||||
{
|
{
|
||||||
if (allowReturn)
|
// Already completed
|
||||||
|
if (completed || asyncOperation == null)
|
||||||
{
|
{
|
||||||
TryReturn();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (completed)
|
|
||||||
{
|
|
||||||
allowReturn = true;
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -219,8 +202,6 @@ namespace Cysharp.Threading.Tasks
|
|||||||
|
|
||||||
if (asyncOperation.isDone)
|
if (asyncOperation.isDone)
|
||||||
{
|
{
|
||||||
cancellationTokenRegistration.Dispose();
|
|
||||||
allowReturn = true;
|
|
||||||
core.TrySetResult(AsyncUnit.Default);
|
core.TrySetResult(AsyncUnit.Default);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -231,31 +212,29 @@ namespace Cysharp.Threading.Tasks
|
|||||||
bool TryReturn()
|
bool TryReturn()
|
||||||
{
|
{
|
||||||
TaskTracker.RemoveTracking(this);
|
TaskTracker.RemoveTracking(this);
|
||||||
cancellationTokenRegistration.Dispose();
|
|
||||||
core.Reset();
|
core.Reset();
|
||||||
asyncOperation.completed -= continuationAction;
|
asyncOperation.completed -= continuationAction;
|
||||||
asyncOperation = default;
|
asyncOperation = default;
|
||||||
progress = default;
|
progress = default;
|
||||||
cancellationToken = default;
|
cancellationToken = default;
|
||||||
|
cancellationTokenRegistration.Dispose();
|
||||||
cancelImmediately = default;
|
cancelImmediately = default;
|
||||||
return pool.TryPush(this);
|
return pool.TryPush(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Continuation(AsyncOperation _)
|
void Continuation(AsyncOperation _)
|
||||||
{
|
{
|
||||||
|
if (completed)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
completed = true;
|
completed = true;
|
||||||
cancellationTokenRegistration.Dispose();
|
|
||||||
if (cancellationToken.IsCancellationRequested)
|
if (cancellationToken.IsCancellationRequested)
|
||||||
{
|
{
|
||||||
core.TrySetCanceled(cancellationToken);
|
core.TrySetCanceled(cancellationToken);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (progress != null)
|
|
||||||
{
|
|
||||||
progress.Report(asyncOperation.progress);
|
|
||||||
}
|
|
||||||
|
|
||||||
core.TrySetResult(AsyncUnit.Default);
|
core.TrySetResult(AsyncUnit.Default);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -350,7 +329,6 @@ namespace Cysharp.Threading.Tasks
|
|||||||
CancellationTokenRegistration cancellationTokenRegistration;
|
CancellationTokenRegistration cancellationTokenRegistration;
|
||||||
bool cancelImmediately;
|
bool cancelImmediately;
|
||||||
bool completed;
|
bool completed;
|
||||||
bool allowReturn;
|
|
||||||
|
|
||||||
UniTaskCompletionSourceCore<UnityEngine.Object> core;
|
UniTaskCompletionSourceCore<UnityEngine.Object> core;
|
||||||
|
|
||||||
@@ -378,7 +356,6 @@ namespace Cysharp.Threading.Tasks
|
|||||||
result.cancellationToken = cancellationToken;
|
result.cancellationToken = cancellationToken;
|
||||||
result.cancelImmediately = cancelImmediately;
|
result.cancelImmediately = cancelImmediately;
|
||||||
result.completed = false;
|
result.completed = false;
|
||||||
result.allowReturn = false;
|
|
||||||
|
|
||||||
asyncOperation.completed += result.continuationAction;
|
asyncOperation.completed += result.continuationAction;
|
||||||
|
|
||||||
@@ -407,16 +384,9 @@ namespace Cysharp.Threading.Tasks
|
|||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
if (!cancellationToken.IsCancellationRequested)
|
if (!(cancelImmediately && cancellationToken.IsCancellationRequested))
|
||||||
{
|
{
|
||||||
if (allowReturn)
|
TryReturn();
|
||||||
{
|
|
||||||
TryReturn();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
allowReturn = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -447,15 +417,9 @@ namespace Cysharp.Threading.Tasks
|
|||||||
|
|
||||||
public bool MoveNext()
|
public bool MoveNext()
|
||||||
{
|
{
|
||||||
if (allowReturn)
|
// Already completed
|
||||||
|
if (completed || asyncOperation == null)
|
||||||
{
|
{
|
||||||
TryReturn();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (completed)
|
|
||||||
{
|
|
||||||
allowReturn = true;
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -472,8 +436,6 @@ namespace Cysharp.Threading.Tasks
|
|||||||
|
|
||||||
if (asyncOperation.isDone)
|
if (asyncOperation.isDone)
|
||||||
{
|
{
|
||||||
cancellationTokenRegistration.Dispose();
|
|
||||||
allowReturn = true;
|
|
||||||
core.TrySetResult(asyncOperation.asset);
|
core.TrySetResult(asyncOperation.asset);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -484,31 +446,29 @@ namespace Cysharp.Threading.Tasks
|
|||||||
bool TryReturn()
|
bool TryReturn()
|
||||||
{
|
{
|
||||||
TaskTracker.RemoveTracking(this);
|
TaskTracker.RemoveTracking(this);
|
||||||
cancellationTokenRegistration.Dispose();
|
|
||||||
core.Reset();
|
core.Reset();
|
||||||
asyncOperation.completed -= continuationAction;
|
asyncOperation.completed -= continuationAction;
|
||||||
asyncOperation = default;
|
asyncOperation = default;
|
||||||
progress = default;
|
progress = default;
|
||||||
cancellationToken = default;
|
cancellationToken = default;
|
||||||
|
cancellationTokenRegistration.Dispose();
|
||||||
cancelImmediately = default;
|
cancelImmediately = default;
|
||||||
return pool.TryPush(this);
|
return pool.TryPush(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Continuation(AsyncOperation _)
|
void Continuation(AsyncOperation _)
|
||||||
{
|
{
|
||||||
|
if (completed)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
completed = true;
|
completed = true;
|
||||||
cancellationTokenRegistration.Dispose();
|
|
||||||
if (cancellationToken.IsCancellationRequested)
|
if (cancellationToken.IsCancellationRequested)
|
||||||
{
|
{
|
||||||
core.TrySetCanceled(cancellationToken);
|
core.TrySetCanceled(cancellationToken);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (progress != null)
|
|
||||||
{
|
|
||||||
progress.Report(asyncOperation.progress);
|
|
||||||
}
|
|
||||||
|
|
||||||
core.TrySetResult(asyncOperation.asset);
|
core.TrySetResult(asyncOperation.asset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -604,7 +564,6 @@ namespace Cysharp.Threading.Tasks
|
|||||||
CancellationTokenRegistration cancellationTokenRegistration;
|
CancellationTokenRegistration cancellationTokenRegistration;
|
||||||
bool cancelImmediately;
|
bool cancelImmediately;
|
||||||
bool completed;
|
bool completed;
|
||||||
bool allowReturn;
|
|
||||||
|
|
||||||
UniTaskCompletionSourceCore<UnityEngine.Object> core;
|
UniTaskCompletionSourceCore<UnityEngine.Object> core;
|
||||||
|
|
||||||
@@ -632,7 +591,6 @@ namespace Cysharp.Threading.Tasks
|
|||||||
result.cancellationToken = cancellationToken;
|
result.cancellationToken = cancellationToken;
|
||||||
result.cancelImmediately = cancelImmediately;
|
result.cancelImmediately = cancelImmediately;
|
||||||
result.completed = false;
|
result.completed = false;
|
||||||
result.allowReturn = false;
|
|
||||||
|
|
||||||
asyncOperation.completed += result.continuationAction;
|
asyncOperation.completed += result.continuationAction;
|
||||||
|
|
||||||
@@ -661,16 +619,9 @@ namespace Cysharp.Threading.Tasks
|
|||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
if (!cancellationToken.IsCancellationRequested)
|
if (!(cancelImmediately && cancellationToken.IsCancellationRequested))
|
||||||
{
|
{
|
||||||
if (allowReturn)
|
TryReturn();
|
||||||
{
|
|
||||||
TryReturn();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
allowReturn = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -701,15 +652,9 @@ namespace Cysharp.Threading.Tasks
|
|||||||
|
|
||||||
public bool MoveNext()
|
public bool MoveNext()
|
||||||
{
|
{
|
||||||
if (allowReturn)
|
// Already completed
|
||||||
|
if (completed || asyncOperation == null)
|
||||||
{
|
{
|
||||||
TryReturn();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (completed)
|
|
||||||
{
|
|
||||||
allowReturn = true;
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -726,8 +671,6 @@ namespace Cysharp.Threading.Tasks
|
|||||||
|
|
||||||
if (asyncOperation.isDone)
|
if (asyncOperation.isDone)
|
||||||
{
|
{
|
||||||
cancellationTokenRegistration.Dispose();
|
|
||||||
allowReturn = true;
|
|
||||||
core.TrySetResult(asyncOperation.asset);
|
core.TrySetResult(asyncOperation.asset);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -738,31 +681,29 @@ namespace Cysharp.Threading.Tasks
|
|||||||
bool TryReturn()
|
bool TryReturn()
|
||||||
{
|
{
|
||||||
TaskTracker.RemoveTracking(this);
|
TaskTracker.RemoveTracking(this);
|
||||||
cancellationTokenRegistration.Dispose();
|
|
||||||
core.Reset();
|
core.Reset();
|
||||||
asyncOperation.completed -= continuationAction;
|
asyncOperation.completed -= continuationAction;
|
||||||
asyncOperation = default;
|
asyncOperation = default;
|
||||||
progress = default;
|
progress = default;
|
||||||
cancellationToken = default;
|
cancellationToken = default;
|
||||||
|
cancellationTokenRegistration.Dispose();
|
||||||
cancelImmediately = default;
|
cancelImmediately = default;
|
||||||
return pool.TryPush(this);
|
return pool.TryPush(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Continuation(AsyncOperation _)
|
void Continuation(AsyncOperation _)
|
||||||
{
|
{
|
||||||
|
if (completed)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
completed = true;
|
completed = true;
|
||||||
cancellationTokenRegistration.Dispose();
|
|
||||||
if (cancellationToken.IsCancellationRequested)
|
if (cancellationToken.IsCancellationRequested)
|
||||||
{
|
{
|
||||||
core.TrySetCanceled(cancellationToken);
|
core.TrySetCanceled(cancellationToken);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (progress != null)
|
|
||||||
{
|
|
||||||
progress.Report(asyncOperation.progress);
|
|
||||||
}
|
|
||||||
|
|
||||||
core.TrySetResult(asyncOperation.asset);
|
core.TrySetResult(asyncOperation.asset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -859,7 +800,6 @@ namespace Cysharp.Threading.Tasks
|
|||||||
CancellationTokenRegistration cancellationTokenRegistration;
|
CancellationTokenRegistration cancellationTokenRegistration;
|
||||||
bool cancelImmediately;
|
bool cancelImmediately;
|
||||||
bool completed;
|
bool completed;
|
||||||
bool allowReturn;
|
|
||||||
|
|
||||||
UniTaskCompletionSourceCore<AssetBundle> core;
|
UniTaskCompletionSourceCore<AssetBundle> core;
|
||||||
|
|
||||||
@@ -887,7 +827,6 @@ namespace Cysharp.Threading.Tasks
|
|||||||
result.cancellationToken = cancellationToken;
|
result.cancellationToken = cancellationToken;
|
||||||
result.cancelImmediately = cancelImmediately;
|
result.cancelImmediately = cancelImmediately;
|
||||||
result.completed = false;
|
result.completed = false;
|
||||||
result.allowReturn = false;
|
|
||||||
|
|
||||||
asyncOperation.completed += result.continuationAction;
|
asyncOperation.completed += result.continuationAction;
|
||||||
|
|
||||||
@@ -916,16 +855,9 @@ namespace Cysharp.Threading.Tasks
|
|||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
if (!cancellationToken.IsCancellationRequested)
|
if (!(cancelImmediately && cancellationToken.IsCancellationRequested))
|
||||||
{
|
{
|
||||||
if (allowReturn)
|
TryReturn();
|
||||||
{
|
|
||||||
TryReturn();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
allowReturn = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -956,15 +888,9 @@ namespace Cysharp.Threading.Tasks
|
|||||||
|
|
||||||
public bool MoveNext()
|
public bool MoveNext()
|
||||||
{
|
{
|
||||||
if (allowReturn)
|
// Already completed
|
||||||
|
if (completed || asyncOperation == null)
|
||||||
{
|
{
|
||||||
TryReturn();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (completed)
|
|
||||||
{
|
|
||||||
allowReturn = true;
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -981,8 +907,6 @@ namespace Cysharp.Threading.Tasks
|
|||||||
|
|
||||||
if (asyncOperation.isDone)
|
if (asyncOperation.isDone)
|
||||||
{
|
{
|
||||||
cancellationTokenRegistration.Dispose();
|
|
||||||
allowReturn = true;
|
|
||||||
core.TrySetResult(asyncOperation.assetBundle);
|
core.TrySetResult(asyncOperation.assetBundle);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -992,32 +916,30 @@ namespace Cysharp.Threading.Tasks
|
|||||||
|
|
||||||
bool TryReturn()
|
bool TryReturn()
|
||||||
{
|
{
|
||||||
cancellationTokenRegistration.Dispose();
|
|
||||||
TaskTracker.RemoveTracking(this);
|
TaskTracker.RemoveTracking(this);
|
||||||
core.Reset();
|
core.Reset();
|
||||||
asyncOperation.completed -= continuationAction;
|
asyncOperation.completed -= continuationAction;
|
||||||
asyncOperation = default;
|
asyncOperation = default;
|
||||||
progress = default;
|
progress = default;
|
||||||
cancellationToken = default;
|
cancellationToken = default;
|
||||||
|
cancellationTokenRegistration.Dispose();
|
||||||
cancelImmediately = default;
|
cancelImmediately = default;
|
||||||
return pool.TryPush(this);
|
return pool.TryPush(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Continuation(AsyncOperation _)
|
void Continuation(AsyncOperation _)
|
||||||
{
|
{
|
||||||
|
if (completed)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
completed = true;
|
completed = true;
|
||||||
cancellationTokenRegistration.Dispose();
|
|
||||||
if (cancellationToken.IsCancellationRequested)
|
if (cancellationToken.IsCancellationRequested)
|
||||||
{
|
{
|
||||||
core.TrySetCanceled(cancellationToken);
|
core.TrySetCanceled(cancellationToken);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (progress != null)
|
|
||||||
{
|
|
||||||
progress.Report(asyncOperation.progress);
|
|
||||||
}
|
|
||||||
|
|
||||||
core.TrySetResult(asyncOperation.assetBundle);
|
core.TrySetResult(asyncOperation.assetBundle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1129,7 +1051,6 @@ namespace Cysharp.Threading.Tasks
|
|||||||
CancellationTokenRegistration cancellationTokenRegistration;
|
CancellationTokenRegistration cancellationTokenRegistration;
|
||||||
bool cancelImmediately;
|
bool cancelImmediately;
|
||||||
bool completed;
|
bool completed;
|
||||||
bool allowReturn;
|
|
||||||
|
|
||||||
UniTaskCompletionSourceCore<UnityWebRequest> core;
|
UniTaskCompletionSourceCore<UnityWebRequest> core;
|
||||||
|
|
||||||
@@ -1157,7 +1078,6 @@ namespace Cysharp.Threading.Tasks
|
|||||||
result.cancellationToken = cancellationToken;
|
result.cancellationToken = cancellationToken;
|
||||||
result.cancelImmediately = cancelImmediately;
|
result.cancelImmediately = cancelImmediately;
|
||||||
result.completed = false;
|
result.completed = false;
|
||||||
result.allowReturn = false;
|
|
||||||
|
|
||||||
asyncOperation.completed += result.continuationAction;
|
asyncOperation.completed += result.continuationAction;
|
||||||
|
|
||||||
@@ -1187,16 +1107,9 @@ namespace Cysharp.Threading.Tasks
|
|||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
if (!cancellationToken.IsCancellationRequested)
|
if (!(cancelImmediately && cancellationToken.IsCancellationRequested))
|
||||||
{
|
{
|
||||||
if (allowReturn)
|
TryReturn();
|
||||||
{
|
|
||||||
TryReturn();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
allowReturn = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -1227,20 +1140,15 @@ namespace Cysharp.Threading.Tasks
|
|||||||
|
|
||||||
public bool MoveNext()
|
public bool MoveNext()
|
||||||
{
|
{
|
||||||
if (allowReturn)
|
// Already completed
|
||||||
|
if (completed || asyncOperation == null)
|
||||||
{
|
{
|
||||||
TryReturn();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (completed)
|
|
||||||
{
|
|
||||||
allowReturn = true;
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cancellationToken.IsCancellationRequested)
|
if (cancellationToken.IsCancellationRequested)
|
||||||
{
|
{
|
||||||
|
asyncOperation.webRequest.Abort();
|
||||||
core.TrySetCanceled(cancellationToken);
|
core.TrySetCanceled(cancellationToken);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -1252,9 +1160,14 @@ namespace Cysharp.Threading.Tasks
|
|||||||
|
|
||||||
if (asyncOperation.isDone)
|
if (asyncOperation.isDone)
|
||||||
{
|
{
|
||||||
cancellationTokenRegistration.Dispose();
|
if (asyncOperation.webRequest.IsError())
|
||||||
allowReturn = true;
|
{
|
||||||
core.TrySetResult(asyncOperation.webRequest);
|
core.TrySetException(new UnityWebRequestException(asyncOperation.webRequest));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
core.TrySetResult(asyncOperation.webRequest);
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1263,22 +1176,24 @@ namespace Cysharp.Threading.Tasks
|
|||||||
|
|
||||||
bool TryReturn()
|
bool TryReturn()
|
||||||
{
|
{
|
||||||
cancellationTokenRegistration.Dispose();
|
|
||||||
TaskTracker.RemoveTracking(this);
|
TaskTracker.RemoveTracking(this);
|
||||||
core.Reset();
|
core.Reset();
|
||||||
asyncOperation.completed -= continuationAction;
|
asyncOperation.completed -= continuationAction;
|
||||||
asyncOperation = default;
|
asyncOperation = default;
|
||||||
progress = default;
|
progress = default;
|
||||||
cancellationToken = default;
|
cancellationToken = default;
|
||||||
|
cancellationTokenRegistration.Dispose();
|
||||||
cancelImmediately = default;
|
cancelImmediately = default;
|
||||||
return pool.TryPush(this);
|
return pool.TryPush(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Continuation(AsyncOperation _)
|
void Continuation(AsyncOperation _)
|
||||||
{
|
{
|
||||||
|
if (completed)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
completed = true;
|
completed = true;
|
||||||
cancellationTokenRegistration.Dispose();
|
|
||||||
|
|
||||||
if (cancellationToken.IsCancellationRequested)
|
if (cancellationToken.IsCancellationRequested)
|
||||||
{
|
{
|
||||||
core.TrySetCanceled(cancellationToken);
|
core.TrySetCanceled(cancellationToken);
|
||||||
@@ -1289,11 +1204,6 @@ namespace Cysharp.Threading.Tasks
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (progress != null)
|
|
||||||
{
|
|
||||||
progress.Report(asyncOperation.progress);
|
|
||||||
}
|
|
||||||
|
|
||||||
core.TrySetResult(asyncOperation.webRequest);
|
core.TrySetResult(asyncOperation.webRequest);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"name": "com.cysharp.unitask",
|
"name": "com.cysharp.unitask",
|
||||||
"displayName": "UniTask",
|
"displayName": "UniTask",
|
||||||
"author": { "name": "Cysharp, Inc.", "url": "https://cysharp.co.jp/en/" },
|
"author": { "name": "Cysharp, Inc.", "url": "https://cysharp.co.jp/en/" },
|
||||||
"version": "2.5.9",
|
"version": "2.5.10",
|
||||||
"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" ],
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: b055f3837a55b4a44abf9bf4bcb3594f
|
|
||||||
folderAsset: yes
|
|
||||||
DefaultImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
MyTEST
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 49ccc900467d35543bb602a3de4d786a
|
|
||||||
DefaultImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
@@ -21,6 +21,7 @@ using System.Linq.Expressions;
|
|||||||
using UnityEngine.Events;
|
using UnityEngine.Events;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// using DG.Tweening;
|
// using DG.Tweening;
|
||||||
|
|
||||||
|
|
||||||
@@ -591,78 +592,69 @@ public class SandboxMain : MonoBehaviour
|
|||||||
|
|
||||||
async UniTaskVoid Start()
|
async UniTaskVoid Start()
|
||||||
{
|
{
|
||||||
var p = Progress.Create<float>(x =>
|
await new WhenEachTest().Each();
|
||||||
|
|
||||||
|
|
||||||
|
// UniTask.Delay(TimeSpan.FromSeconds(1)).TimeoutWithoutException
|
||||||
|
|
||||||
|
|
||||||
|
var currentLoop = PlayerLoop.GetDefaultPlayerLoop();
|
||||||
|
PlayerLoopHelper.Initialize(ref currentLoop, InjectPlayerLoopTimings.Minimum); // minimum is Update | FixedUpdate | LastPostLateUpdate
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// TestAsync(cts.Token).Forget();
|
||||||
|
|
||||||
|
okButton.onClick.AddListener(UniTask.UnityAction(async () =>
|
||||||
{
|
{
|
||||||
Debug.Log(x);
|
await UniTask.WaitForEndOfFrame(this);
|
||||||
});
|
var texture = new Texture2D(Screen.width, Screen.height);
|
||||||
var foo = await Resources.LoadAsync("test2").ToUniTask(progress: p) as TextAsset;
|
texture.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
|
||||||
Debug.Log(foo.text);
|
texture.Apply();
|
||||||
//var foo2 = await Resources.LoadAsync("test2").ToUniTask() as TextAsset;
|
|
||||||
//Debug.Log(foo2.text); // onemore?
|
|
||||||
|
|
||||||
|
var jpg = texture.EncodeToJPG();
|
||||||
|
File.WriteAllBytes("testscreencapture.jpg", jpg);
|
||||||
|
Debug.Log("ok?");
|
||||||
|
|
||||||
|
//var texture = ScreenCapture.CaptureScreenshotAsTexture();
|
||||||
|
//if (texture == null)
|
||||||
|
//{
|
||||||
|
// Debug.Log("fail");
|
||||||
|
//}
|
||||||
|
//else
|
||||||
|
//{
|
||||||
|
// var jpg = texture.EncodeToJPG();
|
||||||
|
// File.WriteAllBytes("testscreencapture.jpg", jpg);
|
||||||
|
// Debug.Log("ok?");
|
||||||
|
//}
|
||||||
|
}));
|
||||||
|
|
||||||
//await new WhenEachTest().Each();
|
cancelButton.onClick.AddListener(UniTask.UnityAction(async () =>
|
||||||
|
{
|
||||||
|
//clickCancelSource.Cancel();
|
||||||
|
|
||||||
|
//RunCheck(PlayerLoopTiming.Initialization).Forget();
|
||||||
|
//RunCheck(PlayerLoopTiming.LastInitialization).Forget();
|
||||||
|
//RunCheck(PlayerLoopTiming.EarlyUpdate).Forget();
|
||||||
|
//RunCheck(PlayerLoopTiming.LastEarlyUpdate).Forget();
|
||||||
|
//RunCheck(PlayerLoopTiming.FixedUpdate).Forget();
|
||||||
|
//RunCheck(PlayerLoopTiming.LastFixedUpdate).Forget();
|
||||||
|
//RunCheck(PlayerLoopTiming.PreUpdate).Forget();
|
||||||
|
//RunCheck(PlayerLoopTiming.LastPreUpdate).Forget();
|
||||||
|
//RunCheck(PlayerLoopTiming.Update).Forget();
|
||||||
|
//RunCheck(PlayerLoopTiming.LastUpdate).Forget();
|
||||||
|
//RunCheck(PlayerLoopTiming.PreLateUpdate).Forget();
|
||||||
|
//RunCheck(PlayerLoopTiming.LastPreLateUpdate).Forget();
|
||||||
|
//RunCheck(PlayerLoopTiming.PostLateUpdate).Forget();
|
||||||
|
//RunCheck(PlayerLoopTiming.LastPostLateUpdate).Forget();
|
||||||
|
|
||||||
//// UniTask.Delay(TimeSpan.FromSeconds(1)).TimeoutWithoutException
|
await UniTask.Yield();
|
||||||
|
}));
|
||||||
|
|
||||||
|
await UniTask.Yield();
|
||||||
//var currentLoop = PlayerLoop.GetDefaultPlayerLoop();
|
|
||||||
//PlayerLoopHelper.Initialize(ref currentLoop, InjectPlayerLoopTimings.Minimum); // minimum is Update | FixedUpdate | LastPostLateUpdate
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//// TestAsync(cts.Token).Forget();
|
|
||||||
|
|
||||||
//okButton.onClick.AddListener(UniTask.UnityAction(async () =>
|
|
||||||
//{
|
|
||||||
// await UniTask.WaitForEndOfFrame(this);
|
|
||||||
// var texture = new Texture2D(Screen.width, Screen.height);
|
|
||||||
// texture.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
|
|
||||||
// texture.Apply();
|
|
||||||
|
|
||||||
// var jpg = texture.EncodeToJPG();
|
|
||||||
// File.WriteAllBytes("testscreencapture.jpg", jpg);
|
|
||||||
// Debug.Log("ok?");
|
|
||||||
|
|
||||||
// //var texture = ScreenCapture.CaptureScreenshotAsTexture();
|
|
||||||
// //if (texture == null)
|
|
||||||
// //{
|
|
||||||
// // Debug.Log("fail");
|
|
||||||
// //}
|
|
||||||
// //else
|
|
||||||
// //{
|
|
||||||
// // var jpg = texture.EncodeToJPG();
|
|
||||||
// // File.WriteAllBytes("testscreencapture.jpg", jpg);
|
|
||||||
// // Debug.Log("ok?");
|
|
||||||
// //}
|
|
||||||
//}));
|
|
||||||
|
|
||||||
//cancelButton.onClick.AddListener(UniTask.UnityAction(async () =>
|
|
||||||
//{
|
|
||||||
// //clickCancelSource.Cancel();
|
|
||||||
|
|
||||||
// //RunCheck(PlayerLoopTiming.Initialization).Forget();
|
|
||||||
// //RunCheck(PlayerLoopTiming.LastInitialization).Forget();
|
|
||||||
// //RunCheck(PlayerLoopTiming.EarlyUpdate).Forget();
|
|
||||||
// //RunCheck(PlayerLoopTiming.LastEarlyUpdate).Forget();
|
|
||||||
// //RunCheck(PlayerLoopTiming.FixedUpdate).Forget();
|
|
||||||
// //RunCheck(PlayerLoopTiming.LastFixedUpdate).Forget();
|
|
||||||
// //RunCheck(PlayerLoopTiming.PreUpdate).Forget();
|
|
||||||
// //RunCheck(PlayerLoopTiming.LastPreUpdate).Forget();
|
|
||||||
// //RunCheck(PlayerLoopTiming.Update).Forget();
|
|
||||||
// //RunCheck(PlayerLoopTiming.LastUpdate).Forget();
|
|
||||||
// //RunCheck(PlayerLoopTiming.PreLateUpdate).Forget();
|
|
||||||
// //RunCheck(PlayerLoopTiming.LastPreLateUpdate).Forget();
|
|
||||||
// //RunCheck(PlayerLoopTiming.PostLateUpdate).Forget();
|
|
||||||
// //RunCheck(PlayerLoopTiming.LastPostLateUpdate).Forget();
|
|
||||||
|
|
||||||
// await UniTask.Yield();
|
|
||||||
//}));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async UniTaskVoid RunCheck(PlayerLoopTiming timing)
|
async UniTaskVoid RunCheck(PlayerLoopTiming timing)
|
||||||
|
|||||||
Reference in New Issue
Block a user