From 0a447e43b0a3a007eb470ee62645f401911a523d Mon Sep 17 00:00:00 2001 From: neuecc Date: Thu, 25 Jun 2020 22:34:45 +0900 Subject: [PATCH] Add UniTask.ToCancellationToken --- .../Runtime/CancellationTokenExtensions.cs | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/UniTask/Assets/Plugins/UniTask/Runtime/CancellationTokenExtensions.cs b/src/UniTask/Assets/Plugins/UniTask/Runtime/CancellationTokenExtensions.cs index ba3bd22..9867dd5 100644 --- a/src/UniTask/Assets/Plugins/UniTask/Runtime/CancellationTokenExtensions.cs +++ b/src/UniTask/Assets/Plugins/UniTask/Runtime/CancellationTokenExtensions.cs @@ -11,6 +11,33 @@ namespace Cysharp.Threading.Tasks static readonly Action cancellationTokenCallback = Callback; static readonly Action disposeCallback = DisposeCallback; + public static CancellationToken ToCancellationToken(this UniTask task) + { + var cts = new CancellationTokenSource(); + ToCancellationTokenCore(task, cts).Forget(); + return cts.Token; + } + + public static CancellationToken ToCancellationToken(this UniTask task) + { + var cts = new CancellationTokenSource(); + ToCancellationTokenCore(task, cts).Forget(); + return cts.Token; + } + + static async UniTaskVoid ToCancellationTokenCore(UniTask task, CancellationTokenSource cts) + { + try + { + await task; + } + catch (Exception ex) + { + UniTaskScheduler.PublishUnobservedTaskException(ex); + } + cts.Cancel(); + } + public static (UniTask, CancellationTokenRegistration) ToUniTask(this CancellationToken cancellationToken) { if (cancellationToken.IsCancellationRequested)