【发布时间】:2021-06-21 20:50:17
【问题描述】:
我正在使用 gRPC 构建一个 .NetCore 应用程序。
我在构建代码以处理流式传输结果时遇到问题。
考虑以下 protobuf 定义:
service SampleService
{
rpc RegisterClient(G_ClientRequest) returns (stream G_ClientResponse) { }
}
这是一个从流中读取结果的代码 sn-p:
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
【问题讨论】:
-
第三方,但 protobuf-net.Grpc 使用 IAsyncEnumerable-T 公开常规 gRPC API,所以:
await foreach就完成了
标签: c# .net-core grpc grpc-dotnet