From 95fa6d52410f55c769f2e2c882d71514ba5f0a4b Mon Sep 17 00:00:00 2001 From: huqingjie Date: Thu, 20 Apr 2023 17:38:07 +0800 Subject: [PATCH 1/2] Result.UnWrapAsync --- src/DotNetCommon.Core/Data/Result.cs | 17 ++++++--- .../Extensions/TaskExtensions.cs | 16 +++++--- tests/DotNetCommon.Test/Data/ResultTests.cs | 38 +++++++++++++------ 3 files changed, 49 insertions(+), 22 deletions(-) diff --git a/src/DotNetCommon.Core/Data/Result.cs b/src/DotNetCommon.Core/Data/Result.cs index cdc62d1..b16b74a 100644 --- a/src/DotNetCommon.Core/Data/Result.cs +++ b/src/DotNetCommon.Core/Data/Result.cs @@ -539,16 +539,21 @@ namespace DotNetCommon.Data public static class ResultExtensions { /// - /// 解开Result模型,null值则返回 default(T) - /// Result.Success为true则返回模型,否则抛出ResultException异常 + /// 解开Result模型, Result.Success为true则返回模型,否则抛出ResultException异常 /// - /// - /// - /// public static T UnWrap(this Result result) { if (result.Success) return result.Data; - throw new Exception(result.Message); + throw new ResultException(result.Message); + } + + /// + /// 解开Result模型, Result.Success为true则返回模型,否则抛出ResultException异常 + /// + public static object UnWrap(this Result result) + { + if (result.Success) return result.Data; + throw new ResultException(result.Message); } } } diff --git a/src/DotNetCommon.Core/Extensions/TaskExtensions.cs b/src/DotNetCommon.Core/Extensions/TaskExtensions.cs index fc06294..8ea3525 100644 --- a/src/DotNetCommon.Core/Extensions/TaskExtensions.cs +++ b/src/DotNetCommon.Core/Extensions/TaskExtensions.cs @@ -14,7 +14,7 @@ public static class TaskExtensions { /// - /// 通用异步转换方法,参照: + /// 通用异步转换方法,参照: /// /// /// @@ -26,12 +26,18 @@ } /// - /// 通用异步转换方法,参照: + /// 解开Result模型, Result.Success为true则返回模型,否则抛出ResultException异常 /// - /// - /// - /// public static async Task UnWrapAsync(this Task> task) + { + var t = await task.ContinueWith(t => t.Result.UnWrap()); + return t; + } + + /// + /// 解开Result模型, Result.Success为true则返回模型,否则抛出ResultException异常 + /// + public static async Task UnWrapAsync(this Task task) { return await task.ContinueWith(t => t.Result.UnWrap()); } diff --git a/tests/DotNetCommon.Test/Data/ResultTests.cs b/tests/DotNetCommon.Test/Data/ResultTests.cs index 2bac715..97e4263 100644 --- a/tests/DotNetCommon.Test/Data/ResultTests.cs +++ b/tests/DotNetCommon.Test/Data/ResultTests.cs @@ -1,4 +1,5 @@ -using DotNetCommon.Data; +using DotNetCommon.Data; +using DotNetCommon.Extensions; using NUnit.Framework; using Shouldly; using System; @@ -15,7 +16,7 @@ namespace DotNetCommon.Test public void Test() { Result.NotOk("error", code: 20002, data: new { }, extData: "errorDetail"); - Result.OkPage(10, new List() { "xiaoming", "С" }); + Result.OkPage(10, new List() { "xiaoming", "小王" }); } public class GetPersonPageReq : PageQuery @@ -35,14 +36,14 @@ namespace DotNetCommon.Test [Test] public async Task ResultWrapTest() { - //ͬ: 쳣 + //同步代码块: 捕获异常 var res = Result.Wrap(() => { int i = 0; i = 5 / i; }); res.Success.ShouldBe(false); - //첽: 쳣 + //异步代码块: 捕获异常 var res2 = await Result.Wrap(async () => { await Task.Run(() => @@ -63,14 +64,14 @@ namespace DotNetCommon.Test [Test] public async Task ResultWrapReturnTest() { - //ͬ: 쳣 + //同步代码块: 捕获异常 var res = Result.WrapReturn(() => { int i = 0; return 5 / i; }); res.Success.ShouldBe(false); - //첽: 쳣 + //异步代码块: 捕获异常 var res2 = await Result.WrapReturn(async () => { return await Task.Run(() => @@ -98,12 +99,27 @@ namespace DotNetCommon.Test var i = res.UnWrap(); i.ShouldBe(1); - res = Result.NotOk("ʧ"); + res = Result.NotOk("失败"); var exp = Should.Throw(() => { res.UnWrap(); }); - exp.Message.ShouldBe("ʧ"); + exp.Message.ShouldBe("失败"); + } + + [Test] + public async Task ResultUnWrapAsyncTest() + { + var res = Task.FromResult(Result.Ok(1)); + var i = await res.UnWrapAsync(); + i.ShouldBe(1); + + var res2 = Task.FromResult(Result.NotOk("失败")); + var exp = Should.Throw(async () => + { + await res2.UnWrapAsync(); + }); + exp.Message.ShouldBe("失败"); } [Test] @@ -114,7 +130,7 @@ namespace DotNetCommon.Test { // return new Result(); return Result.NewInstance(); - return Result.Ok().SetData("һЩ").SetCode(100).SetExtData(new { }).SetSuccess().SetFail().SetSuccessFlag(true); + return Result.Ok().SetData("一些数据").SetCode(100).SetExtData(new { }).SetSuccess().SetFail().SetSuccessFlag(true); } testMethod2(); Result testMethod2() @@ -152,7 +168,7 @@ namespace DotNetCommon.Test res.Success.ShouldBeTrue(); res.Data.ShouldBe(0); - // + //控制器 async Task> Controller(int id) { return await Result.OkAsync(Service(id)); @@ -161,7 +177,7 @@ namespace DotNetCommon.Test //service async Task Service(int id) { - //ģʱ + //模拟耗时请求 var count = await Task.FromResult(id == 1 ? 100 : 0); return count; } -- Gitee From cac6b4d0568747327a1f3734b7b436d27d8c166b Mon Sep 17 00:00:00 2001 From: huqingjie Date: Thu, 20 Apr 2023 17:49:04 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=8F=91=E7=89=88=20v3.1.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/DotNetCommon.Core/DotNetCommon.Core.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/DotNetCommon.Core/DotNetCommon.Core.csproj b/src/DotNetCommon.Core/DotNetCommon.Core.csproj index 8d2396e..4f3cc28 100644 --- a/src/DotNetCommon.Core/DotNetCommon.Core.csproj +++ b/src/DotNetCommon.Core/DotNetCommon.Core.csproj @@ -1,7 +1,7 @@ - 3.1.1 + 3.1.2 True .net常用功能及数据模型,包含: -- Gitee