Skip to content

Commit 5b81ae2

Browse files
author
liguoliang
committed
处理Task和ValueTask无返回值的情况
1 parent b8991af commit 5b81ae2

3 files changed

Lines changed: 10 additions & 2 deletions

File tree

demo/Test.Client/Program.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,9 @@ static async Task Main(string[] args)
171171
Console.WriteLine($"获取添加Product2,id=2000,person=[{product.ToJson()}]");
172172
var products = await productService.GetProducts();
173173
Console.WriteLine($"products=[{products.ToJson()}]");
174+
Task editTask = productService.Edit(1);
175+
await editTask;
176+
Console.WriteLine($"修改Product,id=1完成");
174177

175178
//BenchmarkRunner.Run<RpcClientBenchTest>();
176179

src/DotNetCoreRpc.Client/HttpRequestInterceptor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public void Intercept(IInvocation invocation)
3636

3737
if (methodReturnType.IsTask() || methodReturnType.IsValueTask())
3838
{
39-
invocation.ReturnValue = Task.CompletedTask;
39+
invocation.ReturnValue = _requestHandler.TaskValueTaskWithoutResultHandle(invocation.Method, invocation.Arguments);
4040
return;
4141
}
4242

src/DotNetCoreRpc.Client/RequestHandler.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,11 @@ public object SyncResultHandle(MethodInfo methodInfo, params object[] arguments)
3131
return TaskResultHandle<object>(methodInfo, arguments).GetAwaiter().GetResult();
3232
}
3333

34+
public Task TaskValueTaskWithoutResultHandle(MethodInfo methodInfo, params object[] arguments)
35+
{
36+
return TaskResultHandle<object>(methodInfo, arguments);
37+
}
38+
3439
public Func<MethodInfo, object[], object> GetTaskResultHandleFunc(TypeInfo methodReturnType)
3540
{
3641
return _taskFuncCache.GetOrAdd(methodReturnType, type => {
@@ -70,7 +75,7 @@ private async Task<T> TaskResultHandle<T>(MethodInfo methodInfo, params object[]
7075
}
7176

7277
TypeInfo methodReturnType = methodInfo.ReturnType.GetTypeInfo();
73-
if (methodReturnType.IsAsync())
78+
if (methodReturnType.IsAsync() && !methodReturnType.IsTask() && !methodReturnType.IsValueTask())
7479
{
7580
methodReturnType = methodReturnType.GetGenericArguments()[0].GetTypeInfo();
7681
}

0 commit comments

Comments
 (0)