如果服务器关闭,如何在C#中创建gRPC客户端超时?

maz*_*tor 5 c# grpc

我正在使用来自MS Windows 10上的C#平台的gRPC写回TensorFlow服务系统的连接.我已经看到许多对gRPC的C++ API的超时和死线的引用,但似乎无法弄清楚如何在C#下进行超时.

我只是打开一个到服务器的通道,设置客户端和调用服务器.我希望这个Classify在5秒左右后超时.任何帮助或方向将不胜感激.

channel = new Channel(modelServer,ChannelCredentials.Insecure);

var client = MyService.NewClient(channel);

MyResponse classvalue = client.Classify(featureSet);

小智 8

需要在调用连接通道时使用 GRPC 超时来检测服务器停机场景。我是这样做的:

    private async void SampleCode()
     {
          var client = await GetClient();
          var data = await client.GetAllTemplatesAsync(request, new 
                CallOptions().WithDeadline(DateTime.UtcNow.AddSeconds(7)));

     }

    private async Task<MyGrpcClient> GetClient()
    {
        var channel = new Channel("somehost",23456, ChannelCredentials.Insecure);
        await channel.ConnectAsync(deadline: DateTime.UtcNow.AddSeconds(2));
        return new MyGrpcClient(channel);
    }
Run Code Online (Sandbox Code Playgroud)

因此,如果服务器关闭,则对 GetClient() 的调用将超时。如果服务器已启动但响应时间过长,则客户端服务调用的超时将生效。


Jan*_*sch 7

要设置通话的截止日期,您只需使用以下"截止日期:"

client.Classify(featureSet, deadline: DateTime.UtcNow.AddSeconds(5));
Run Code Online (Sandbox Code Playgroud)

要么

client.Classify(featureSet, new CallOptions(deadline: DateTime.UtcNow.AddSeconds(5)));
Run Code Online (Sandbox Code Playgroud)

代码完成后,两种方式都应该很容易被发现.

  • 分类只是一个例子。因此,请将其读作 myGrpcClient.MyCall(someParam,截止日期:DateTime.UtcNow.AddSeconds(5)); (4认同)
  • 这个答案似乎已经过时了,当前版本中没有“分类”。 (2认同)