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

How do you make gRPC client Timeout in C# if the server is down?

我正在从 MS 上的 C# 平台使用 gRPC 将连接写回 TensorFlow 服务系统 Windows10。我看到很多关于 C++ 超时和截止日期的参考 API 对于 gRPC,但似乎无法弄清楚如何在 C# 下超时。

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

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

var client = MyService.NewClient(channel);

MyResponse classvalue = client.Classify(featureSet);

要设置通话的截止日期,您可以简单地使用以下 "deadline:"

client.Classify(featureSet, deadline: DateTime.UtcNow.AddSeconds(5));

client.Classify(featureSet, new CallOptions(deadline: DateTime.UtcNow.AddSeconds(5)));

这两种方式都应该很容易被代码完成发现。

需要在呼叫连接通道时使用 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);
    }

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