多个流

时间:2019-09-18 06:48:45

标签: c# grpc

我可以同时打开两个流吗?或在另一个方法中调用一个方法?

在最坏的例子中,我需要从客户端到服务器的2个流,从服务器到客户端的1个流,有时只发送一条消息。流必须一直工作。

当我尝试在任务中执行2流方法时,只能先工作。

await Task.WhenAll(GetData(client), SendData(client));

private static async Task GetData(ServiceClient client)
{
    using (var call = client.GetDataStream(new Protos.Model() { Id = 3 }))
    {
        await foreach (var item in call.ResponseStream.ReadAllAsync())
        {
            // do something with data and then send
            SendData(item);
        }
    }
}

public static async Task SendData(ServiceClient client, Protos.Model item)
{
    using (var call = client.SendDataToServer())
    {
        await call.RequestStream.WriteAsync(item));
    }
}

1 个答案:

答案 0 :(得分:0)

两种情况都受支持,并且许多用户通常使用它们。 1.您肯定可以同时打开多个流式RPC。 2.您可以从服务器端处理程序启动新的RPC。

不确定您的代码不起作用(您不会提及所收到的错误),但是在代码段中,嵌套的SendData()调用之前缺少await。完全支持。