Fix timing to returning to pool

pull/557/head
hadashiA 2024-03-28 15:00:41 +09:00
parent a48f11d31b
commit caccccb0b5
1 changed files with 53 additions and 41 deletions

View File

@ -110,6 +110,7 @@ namespace Cysharp.Threading.Tasks
CancellationTokenRegistration cancellationTokenRegistration;
IProgress<float> progress;
bool autoReleaseWhenCanceled;
bool cancelImmediately;
bool completed;
UniTaskCompletionSourceCore<AsyncUnit> core;
@ -134,7 +135,7 @@ namespace Cysharp.Threading.Tasks
result.handle = handle;
result.progress = progress;
result.cancellationToken = cancellationToken;
result.completed = false;
result.cancelImmediately = cancelImmediately;
result.autoReleaseWhenCanceled = autoReleaseWhenCanceled;
if (cancelImmediately && cancellationToken.CanBeCanceled)
@ -169,10 +170,9 @@ namespace Cysharp.Threading.Tasks
if (completed)
{
TryReturn();
return;
}
else
{
completed = true;
if (cancellationToken.IsCancellationRequested)
{
@ -191,12 +191,19 @@ namespace Cysharp.Threading.Tasks
core.TrySetResult(AsyncUnit.Default);
}
}
}
public void GetResult(short token)
{
try
{
core.GetResult(token);
}
finally
{
if (!(cancelImmediately && cancellationToken.IsCancellationRequested))
TryReturn();
}
}
public UniTaskStatus GetStatus(short token)
{
@ -217,7 +224,6 @@ namespace Cysharp.Threading.Tasks
{
if (completed)
{
TryReturn();
return false;
}
@ -304,6 +310,7 @@ namespace Cysharp.Threading.Tasks
CancellationTokenRegistration cancellationTokenRegistration;
IProgress<float> progress;
bool autoReleaseWhenCanceled;
bool cancelImmediately;
bool completed;
UniTaskCompletionSourceCore<T> core;
@ -330,6 +337,7 @@ namespace Cysharp.Threading.Tasks
result.completed = false;
result.progress = progress;
result.autoReleaseWhenCanceled = autoReleaseWhenCanceled;
result.cancelImmediately = cancelImmediately;
if (cancelImmediately && cancellationToken.CanBeCanceled)
{
@ -363,10 +371,8 @@ namespace Cysharp.Threading.Tasks
if (completed)
{
TryReturn();
return;
}
else
{
completed = true;
if (cancellationToken.IsCancellationRequested)
{
@ -385,12 +391,19 @@ namespace Cysharp.Threading.Tasks
core.TrySetResult(argHandle.Result);
}
}
}
public T GetResult(short token)
{
try
{
return core.GetResult(token);
}
finally
{
if (!(cancelImmediately && cancellationToken.IsCancellationRequested))
TryReturn();
}
}
void IUniTaskSource.GetResult(short token)
{
@ -416,7 +429,6 @@ namespace Cysharp.Threading.Tasks
{
if (completed)
{
TryReturn();
return false;
}