受我当前问题的启发,这与此有点相同:
Analogue of Queue.Peek() for BlockingCollection when listening to consuming IEnumerable<T> 的不同之处在于我 - 目前 - 正在使用 ConcurrentQueue<T>
而不是 BlockingCollection<T>
,我想知道 ConcurrentQueue<T>.TryPeek()
的任何用例可能是什么?
当然,我的意思是一个没有手动 lock(myQueue)
内容的用例来序列化队列访问,因为 TPL 旨在改进/替代这些锁定。
最佳答案
我有一个使用 ConcurrentQueue<T>.TryPeek
效果很好的应用程序。设置了一个线程来监视队列。主要是查看队列大小,但我们也想了解延迟。因为队列中的item有一个时间戳字段,表示它们是什么时候放入队列的,我的监控线程可以调用TryPeek
获取队列头部的item,从当前时间减去插入时间,并告诉我知道这个项目在队列中已经有多久了。随着时间的推移和许多 sample ,这让我非常清楚地了解处理收到的物品需要多长时间。
当我的监控代码仍在检查它时,其他线程可能使该项目出列并不重要。
我可以想到其他一些场景,在这些场景中,查看队列头部的内容会很有用,即使它可能会立即被取消。
关于c# - ConcurrentQueue<T>.TryPeek() 的用例是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22810966/