C# 在Func中封装异步方法<;T>;
首先,我希望标题没问题 我有一个Grpc客户机,它提供著名的迎宾服务,并尝试将SayHelloAsync调用封装在Func中。 但是=>操作符是红线的,因为他不能转换他所说的表达式。 如果我删除任何async/Wait,它就会工作。 这可能是因为SayHelloAsync返回AsyncUnaryCall(其中有一个等待器)而不是Task,但在其结束时返回 我想这不是Grpc的问题,只是我的理解错误 以下是我的尝试:C# 在Func中封装异步方法<;T>;,c#,asynchronous,async-await,grpc,C#,Asynchronous,Async Await,Grpc,首先,我希望标题没问题 我有一个Grpc客户机,它提供著名的迎宾服务,并尝试将SayHelloAsync调用封装在Func中。 但是=>操作符是红线的,因为他不能转换他所说的表达式。 如果我删除任何async/Wait,它就会工作。 这可能是因为SayHelloAsync返回AsyncUnaryCall(其中有一个等待器)而不是Task,但在其结束时返回 我想这不是Grpc的问题,只是我的理解错误 以下是我的尝试: static async Task Main() { var client
static async Task Main()
{
var client = CreateGreeterClient();
await UnsafeTask<Service.HelloReply>(async () =>
{
var result = await client.SayHelloAsync(new Service.HelloRequest { Name = greeter.Name });
return Task<Service.HelloReply>.FromResult(result);
});
Console.ReadKey();
}
static async Task<T> UnsafeTask<T>(Func<AsyncUnaryCall<T>> method) where T:class
{
try
{
return await method();
}
catch (Exception exception)
{
Console.WriteLine(exception.Message);
return null;
}
}
static async Task Main()
{
var client=CreateGreeterClient();
等待非安全任务(异步()=>
{
var result=wait client.SayHelloAsync(new Service.HelloRequest{Name=greeter.Name});
返回Task.FromResult(结果);
});
Console.ReadKey();
}
静态异步任务(Func方法),其中T:class
{
尝试
{
返回等待方法();
}
捕获(异常)
{
Console.WriteLine(异常消息);
返回null;
}
}
任何提示都会很有用。为什么要使用
返回任务。FromResult(result)代码>?当然,这应该只是返回结果代码>?您是否将任务包装了太多次?只需尝试返回结果代码>旁注:如果AsyncUnaryCall
etc机器对您来说不美观,那么您可能会发现protobuf-net.Grpc很有趣;它构建在相同的gRPC API上,但有一个更为惯用的.NET API shapeNice plug@marcGravel:)我希望在我的系统中从JSON迁移到gRPC时很快就开始使用它company@aepot你让我开心;)非常感谢。