From 7cce0f48e5a47ab94da5a0d9fc95010cca0bd26c Mon Sep 17 00:00:00 2001 From: neuecc Date: Mon, 25 May 2020 09:54:26 +0900 Subject: [PATCH] call webRequest.Abort() on canceled --- .../UniTask/Runtime/UnityAsyncExtensions.cs | 31 ++++++++++--------- src/UniTask/Assets/Scenes/SandboxMain.cs | 18 ++++++++--- 2 files changed, 30 insertions(+), 19 deletions(-) diff --git a/src/UniTask/Assets/Plugins/UniTask/Runtime/UnityAsyncExtensions.cs b/src/UniTask/Assets/Plugins/UniTask/Runtime/UnityAsyncExtensions.cs index a947956..3374c22 100644 --- a/src/UniTask/Assets/Plugins/UniTask/Runtime/UnityAsyncExtensions.cs +++ b/src/UniTask/Assets/Plugins/UniTask/Runtime/UnityAsyncExtensions.cs @@ -13,7 +13,7 @@ namespace Cysharp.Threading.Tasks { public static partial class UnityAsyncExtensions { -#region AsyncOperation + #region AsyncOperation public static AsyncOperationAwaiter GetAwaiter(this AsyncOperation asyncOperation) { @@ -116,7 +116,7 @@ namespace Cysharp.Threading.Tasks try { TaskTracker.RemoveTracking(this); - + core.GetResult(token); } finally @@ -179,9 +179,9 @@ namespace Cysharp.Threading.Tasks } } -# endregion + #endregion -#region ResourceRequest + #region ResourceRequest public static ResourceRequestAwaiter GetAwaiter(this ResourceRequest asyncOperation) { @@ -288,7 +288,7 @@ namespace Cysharp.Threading.Tasks try { TaskTracker.RemoveTracking(this); - + return core.GetResult(token); } finally @@ -356,9 +356,9 @@ namespace Cysharp.Threading.Tasks } } -# endregion + #endregion -#region AssetBundleRequest + #region AssetBundleRequest public static AssetBundleRequestAwaiter GetAwaiter(this AssetBundleRequest asyncOperation) { @@ -465,7 +465,7 @@ namespace Cysharp.Threading.Tasks try { TaskTracker.RemoveTracking(this); - + return core.GetResult(token); } finally @@ -533,9 +533,9 @@ namespace Cysharp.Threading.Tasks } } -# endregion + #endregion -#region AssetBundleCreateRequest + #region AssetBundleCreateRequest public static AssetBundleCreateRequestAwaiter GetAwaiter(this AssetBundleCreateRequest asyncOperation) { @@ -642,7 +642,7 @@ namespace Cysharp.Threading.Tasks try { TaskTracker.RemoveTracking(this); - + return core.GetResult(token); } finally @@ -710,10 +710,10 @@ namespace Cysharp.Threading.Tasks } } -# endregion + #endregion #if ENABLE_UNITYWEBREQUEST -#region UnityWebRequestAsyncOperation + #region UnityWebRequestAsyncOperation public static UnityWebRequestAsyncOperationAwaiter GetAwaiter(this UnityWebRequestAsyncOperation asyncOperation) { @@ -820,7 +820,7 @@ namespace Cysharp.Threading.Tasks try { TaskTracker.RemoveTracking(this); - + return core.GetResult(token); } finally @@ -853,6 +853,7 @@ namespace Cysharp.Threading.Tasks { if (cancellationToken.IsCancellationRequested) { + asyncOperation.webRequest.Abort(); core.TrySetCanceled(cancellationToken); return false; } @@ -888,7 +889,7 @@ namespace Cysharp.Threading.Tasks } } -# endregion + #endregion #endif } diff --git a/src/UniTask/Assets/Scenes/SandboxMain.cs b/src/UniTask/Assets/Scenes/SandboxMain.cs index 5eaef08..e9dcf15 100644 --- a/src/UniTask/Assets/Scenes/SandboxMain.cs +++ b/src/UniTask/Assets/Scenes/SandboxMain.cs @@ -252,8 +252,18 @@ public class SandboxMain : MonoBehaviour async UniTaskVoid Test2() { - var r = await UniAsync("https://bing.com/"); - Debug.Log("UNIASYNC"); + try + { + var cts = new CancellationTokenSource(); + var r = UniAsync("https://bing.com/", cts.Token); + cts.Cancel(); + await r; + Debug.Log("UNIASYNC"); + } + catch + { + Debug.Log("Canceled"); + } } IEnumerator Test3(string url) @@ -269,9 +279,9 @@ public class SandboxMain : MonoBehaviour return req; } - static async UniTask UniAsync(string url) + static async UniTask UniAsync(string url, CancellationToken cancellationToken) { - var req = await UnityWebRequest.Get(url).SendWebRequest(); + var req = await UnityWebRequest.Get(url).SendWebRequest().WithCancellation(cancellationToken); return req; }