0

良い一日。

rpc 呼び出し用の TPL データフロー メッシュがあります。

2 つのねじれていないフローがあり、単純化すると次のようになります。

出力フロー:

  • 出力を格納する BlockBuffer
  • 出力をサーバーに送信し、送信済み ID を生成するための ActionBLock

入力フロー:

  • データを受け取る while ループ
  • データを解析する TransformBlock
  • sendid で回答を保存する BlockBuffer

問題があります。別のスレッドから呼び出しを行うと、回答が混乱する可能性があるため、フィルタリングする必要があります。

私の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 がありますが、それをフィルタリングして待機するにはどうすればよいですか?

rpc 呼び出しとフィルターを使用した LinkedTo で作成されるバッファーの配列 (おそらく WriteOnceBlock?) を持つのは良い方法ですか?

4

2 に答える 2