我有一个充当服务器和客户端的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);
}
答案 0 :(得分:0)
似乎有效的方法是使服务器和客户端调用全部async
。