私は自分の状況を説明します。
私はプロデューサ1からNコンシューマパターンを持っています。ブロッキング コレクションを使用していますが、すべて正常に動作しています。いくつかのテストを行って、この奇妙な動作に気付きました:
私は、消費者のデータ操作にかかる時間をテストしていました。この奇妙なことに気付きました。以下に、私の操作が削除され、奇妙な動作を引き起こすコードが表示されます。
1 つのプロデューサーに対して 4 つのコンシューマーがあります。ほとんどのデータについて、コンソールは何も出力しません。これは ts=0 (目盛りの下) であるためですが、ランダムに (1 から 5 秒ごとに) 次のようなものをプロットします (この非常に特定の順序ではなく、同じ種類の) ):
10000
20001
10000
30002
10000
40003
10000
10000
約 10,000 ティックなので、約 1 ミリ秒です。常に (N)000(N-1) の形式の数値です。使用する BlockingCollection は、完全にランダムな時間に発生したいくつかのネットワーク イベントに応じて満たされることに注意してください。ここから通常のものはありません。
タイミングはほぼ完璧で、常に 10,000 ティックの倍数です。
この背後には何がありますか? ありがとう!
while(IsAlive)
{
DataToFieldMapping item;
try
{
_CollectionToConsume.TryTake(out item, -1);
}
catch
{
item = null;
}
if (item != null)
{
long ts = (DateTime.Now.Ticks - item.TimeStamp.Ticks);
if(ts>10)
Console.WriteLine(ts);
}
}