C# 在Func中封装异步方法<;T>;

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

首先,我希望标题没问题

我有一个Grpc客户机,它提供著名的迎宾服务,并尝试将SayHelloAsync调用封装在Func中。 但是=>操作符是红线的,因为他不能转换他所说的表达式。 如果我删除任何async/Wait,它就会工作。 这可能是因为SayHelloAsync返回AsyncUnaryCall(其中有一个等待器)而不是Task,但在其结束时返回 我想这不是Grpc的问题,只是我的理解错误

以下是我的尝试:

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你让我开心;)非常感谢。