我正在编写一个程序,其中一个线程需要将项目推送到队列中,并且一个或多个线程将项目从队列中弹出并处理它们。为了避免内存不足,我希望生产者线程在队列满时休眠。有些项目的优先级高于其他项目,所以我希望先处理这些项目。如果项目具有相同的优先级,我希望最先添加的项目首先被处理。
我想在 WPF DataGrid 中显示前 100 个左右的项目,因此它也需要由 UI 线程访问。如果它可以通知 UI 线程也有更新,那就太好了,即实现 IObservable。
是否有一个容器类可以完成所有这些工作?
对于奖励积分,我很确定在入队和出队时都不需要锁定整个队列。
.NET 4 实现很好。