我说明我的情况。
我有一个生产者 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);
}
}