ConcurrentQueue <T> .TryPeek()的用例是什么?

Nic*_*las 4 c# multithreading .net-4.0 task-parallel-library

灵感来自我当前的问题,这与此类似: Queling.Peek()的类似于BlockingCollection,当听取消费IEnumerable <T>与我当前的区别 - 我正在使用ConcurrentQueue<T>而不是BlockingCollection<T>,我想知道什么是用例对于ConcurrentQueue<T>.TryPeek()可能?

当然,我的意思是没有手动lock(myQueue)内容的用例来序列化队列访问,因为TPL旨在改进/替代这些锁定.

Jim*_*hel 10

我有一个ConcurrentQueue<T>.TryPeek效果很好的应用程序.设置了一个线程来监视队列.它主要是关注队列大小,但我们也希望了解延迟.因为在队列中的项目有时间戳字段,说什么时候他们被放入队列,我的监视线程可以调用TryPeek在队列的头部,以获得该项目,从当前时间减去插入时间,并告诉我该项目在队列中的时间长度.随着时间的推移和许多样本,这让我非常清楚地了解了收到的物品需要多长时间才能得到处理.

当我的监控代码仍在检查时,其他一些线程可能会将项目出列并不重要.

我可以想到一些其他场景,即使它可能立即被拉出,看看队列头部的内容是有用的.