fix DOTweenExt's TweenCancelBehaviour.CancelAwait

master
neuecc 2020-05-23 02:53:48 +09:00
parent 07cf65c1ec
commit f3e3ba8864
1 changed files with 4 additions and 10 deletions

View File

@ -86,7 +86,8 @@ namespace Cysharp.Threading.Tasks
sealed class TweenConfiguredSource : IUniTaskSource, IPromisePoolItem sealed class TweenConfiguredSource : IUniTaskSource, IPromisePoolItem
{ {
static readonly PromisePool<TweenConfiguredSource> pool = new PromisePool<TweenConfiguredSource>(); static readonly PromisePool<TweenConfiguredSource> pool = new PromisePool<TweenConfiguredSource>();
static Action<object> CancellationCallbackDelegate = CancellationCallback; static readonly Action<object> CancellationCallbackDelegate = CancellationCallback;
static readonly TweenCallback EmptyTweenCallback = () => { };
Tween tween; Tween tween;
TweenCancelBehaviour cancelBehaviour; TweenCancelBehaviour cancelBehaviour;
@ -137,16 +138,9 @@ namespace Cysharp.Threading.Tasks
{ {
cancellationTokenRegistration.Dispose(); cancellationTokenRegistration.Dispose();
if (canceled) if (canceled)
{
if (cancelBehaviour == TweenCancelBehaviour.CancelAwait)
{
// already called TrySetCanceled, do nothing.
}
else
{ {
core.TrySetCanceled(cancellationToken); core.TrySetCanceled(cancellationToken);
} }
}
else else
{ {
core.TrySetResult(AsyncUnit.Default); core.TrySetResult(AsyncUnit.Default);
@ -189,7 +183,7 @@ namespace Cysharp.Threading.Tasks
self.tween.Complete(true); self.tween.Complete(true);
break; break;
case TweenCancelBehaviour.CancelAwait: case TweenCancelBehaviour.CancelAwait:
self.canceled = true; self.tween.onKill = EmptyTweenCallback; // replace to empty(avoid callback after Caceled(instance is returned to pool.)
self.core.TrySetCanceled(self.cancellationToken); self.core.TrySetCanceled(self.cancellationToken);
break; break;
} }