-1

我正在使用 gRPC 构建一个 .NetCore 应用程序。

我在构建代码来处理流结果时遇到问题。

考虑以下 protobuf 定义:

service SampleService
{
    rpc RegisterClient(G_ClientRequest) returns (stream G_ClientResponse) { }
}

这是从流中读取结果的代码片段:

public ConnectToClient()
{
    var results = Client.RegisterClient(new G_ClientRequest() 
    { 
        ClientName = "Foo",
        DateTimeStamp = new Google.Protobuf.WellKnownTypes.Timestamp()
    });
    
    var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5));
    foreach (var result in results.ResponseStream.ReadAllAsync(cancellationToken: cts.Token))
    {

    }   
}

我一直在谷歌搜索,发现类似于我上面处理流结果的代码的东西。但是代码无法编译。 ReadAllAsync()在IAsyncStreamReader的接口定义中不可用。

.Net Core 中是否不提供/支持此功能?我正在使用 Grpc (2.38) 的最新稳定版本。

如果这对我不可用,如何从.Net Core 中的ResponseStream检索结果?

谢谢,约翰B

4

2 回答 2

1

根据 gRPC 文档,接口 IAsyncStreamReader 没有 ReadAllAsync() 方法。

https://grpc.github.io/grpc/csharp/api/Grpc.Core.IAsyncStreamReader-1.html

于 2021-06-21T22:13:30.573 回答
0

ReadAllAsync 是 Grpc.Core 中包含的一个扩展,如果你已经安装了 Nuget 包 Grpc.Net.Client,只需添加:

using Grpc.Core;
于 2021-08-04T01:39:15.560 回答