Добрый день.Правильный способ фильтрации BlockBuffer.RecieveAsync
У меня есть TPL Dataflow сетка для RPC вызовов
Он имеет два unkinked потоки, которые в упрощенном виде выглядит следующим образом:
Выходной поток:
- BlockBuffer для хранения OUTPUT
- ActionBLock для отправки вывода на сервер и отправки отправленного идентификатора
И входной поток:
- в то время как цикл, чтобы получать ДАННЫЕ
- 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 с фильтром?