在客户端和服务器之间有2个请求的正确方法

时间:2019-03-21 02:16:12

标签: c# grpc

我有一个充当服务器和客户端的P2P网络应用。

该应用程序连接到网格中的多个客户端,并在处理完数据后相互发送“数据”。

如果客户端收到传入请求,则在完成传入请求之前创建了自己的请求,这似乎死锁并且两个请求都没有完成。除非发送了要处理的创建内容,否则一切正常。

这是因为我没有在服务器方法上使用async,还是因为我不应该在处理请求时发送请求?

proto

rpc submit_data(DataSubmission) returns (DataSubmissionAck);

RPC服务器

public async void Start()
{
    _server = new Server()
    {
       Services = {
          DataService.BindService(new DataService())),
       },
       Ports = { new ServerPort(_IpAddress, _Port, ServerCredentials.Insecure) }
    };

    _server.Start();
}

客户端方法

public void SubmitData(Data data)
{
    ...
    var serverResponse = _serviceClient.submit_data(request);
    ...
}

服务器方法

public override Task<DataSubmissionAck> submit_data(DataSubmission request, ServerCallContext context)
{
    DataSubmissionAck clientResponse = new DataSubmissionAck();
    return Task.FromResult(clientResponse);
}

1 个答案:

答案 0 :(得分:0)

似乎有效的方法是使服务器和客户端调用全部async