From 62a2a2e8f91161ef946ae258e1943fc290cf07ba Mon Sep 17 00:00:00 2001 From: hadashiA Date: Fri, 8 Sep 2023 18:43:41 +0900 Subject: [PATCH 1/2] Use always innerException for Task.AsUniTask --- src/UniTask.NetCoreTests/TaskExtensionsTest.cs | 9 +++++++++ .../Assets/Plugins/UniTask/Runtime/UniTaskExtensions.cs | 4 ++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/UniTask.NetCoreTests/TaskExtensionsTest.cs b/src/UniTask.NetCoreTests/TaskExtensionsTest.cs index 3926561..6097bc1 100644 --- a/src/UniTask.NetCoreTests/TaskExtensionsTest.cs +++ b/src/UniTask.NetCoreTests/TaskExtensionsTest.cs @@ -20,6 +20,15 @@ namespace NetCoreTests await ThrowOrValueAsync().AsUniTask(); }); } + + [Fact] + public async Task PropagateExceptionWhenAll() + { + await Assert.ThrowsAsync(async () => + { + await Task.WhenAll(ThrowAsync(), ThrowAsync()).AsUniTask(); + }); + } async Task ThrowAsync() { diff --git a/src/UniTask/Assets/Plugins/UniTask/Runtime/UniTaskExtensions.cs b/src/UniTask/Assets/Plugins/UniTask/Runtime/UniTaskExtensions.cs index 77ce536..6407be5 100644 --- a/src/UniTask/Assets/Plugins/UniTask/Runtime/UniTaskExtensions.cs +++ b/src/UniTask/Assets/Plugins/UniTask/Runtime/UniTaskExtensions.cs @@ -28,7 +28,7 @@ namespace Cysharp.Threading.Tasks p.TrySetCanceled(); break; case TaskStatus.Faulted: - p.TrySetException(x.Exception.InnerExceptions.Count == 1 ? x.Exception.InnerException : x.Exception); + p.TrySetException(x.Exception.InnerException); break; case TaskStatus.RanToCompletion: p.TrySetResult(x.Result); @@ -58,7 +58,7 @@ namespace Cysharp.Threading.Tasks p.TrySetCanceled(); break; case TaskStatus.Faulted: - p.TrySetException(x.Exception.InnerExceptions.Count == 1 ? x.Exception.InnerException : x.Exception); + p.TrySetException(x.Exception.InnerException); break; case TaskStatus.RanToCompletion: p.TrySetResult(); From 90c81613acd9d652644a891bd7fda5eb91b42979 Mon Sep 17 00:00:00 2001 From: hadashiA Date: Thu, 14 Sep 2023 16:08:32 +0900 Subject: [PATCH 2/2] Add check to that innerException is empty --- .../Assets/Plugins/UniTask/Runtime/UniTaskExtensions.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/UniTask/Assets/Plugins/UniTask/Runtime/UniTaskExtensions.cs b/src/UniTask/Assets/Plugins/UniTask/Runtime/UniTaskExtensions.cs index 6407be5..362da52 100644 --- a/src/UniTask/Assets/Plugins/UniTask/Runtime/UniTaskExtensions.cs +++ b/src/UniTask/Assets/Plugins/UniTask/Runtime/UniTaskExtensions.cs @@ -28,7 +28,7 @@ namespace Cysharp.Threading.Tasks p.TrySetCanceled(); break; case TaskStatus.Faulted: - p.TrySetException(x.Exception.InnerException); + p.TrySetException(x.Exception.InnerException ?? x.Exception); break; case TaskStatus.RanToCompletion: p.TrySetResult(x.Result); @@ -58,7 +58,7 @@ namespace Cysharp.Threading.Tasks p.TrySetCanceled(); break; case TaskStatus.Faulted: - p.TrySetException(x.Exception.InnerException); + p.TrySetException(x.Exception.InnerException ?? x.Exception); break; case TaskStatus.RanToCompletion: p.TrySetResult();