再会。
我有一个用于 rpc 调用的 TPL 数据流网格
它有两个未扭结的流程,简化后如下所示:
输出流量:
- BlockBuffer 存储输出
- ActionBlock 将输出发送到服务器并生成发送的 id
和输入流:
- while循环接收数据
- TransformBlock 解析数据
- BlockBuffer 用 sentid 保存答案
有一个问题:当我从不同的线程拨打电话时,我可能会弄乱答案,所以我需要过滤它。
我的 RPC 调用:
public async Task<RpcAnswer> PerformRpcCall(Call rpccall)
{
...
_outputRpcCalls.Post(rpccall);
long uniqueId = GetUniq(); // call unique id
...
var sent = new Tuple<long, long>(uniqueId, 0);
while (_sentRpcCalls.TryReceive(u => u.Item1 == uniqueId, out sent)) ; // get generated id from send function
return await _inputAnswers.ReceiveAsync(TimeSpan.FromSeconds(30));
}
如您所见,我有 uniqueId 可以帮助我确定此呼叫的答案,但是我如何过滤它并等待它?
拥有一些缓冲区数组(可能是WriteOnceBlock?)是一个好方法吗?这些缓冲区将在rpc调用中创建并带有过滤器的LinkedTo?