线程安全缓冲的可观察优先级队列?

mpe*_*pen 5 c# collections container-classes

我正在编写一个程序,其中一个线程需要将项目推送到队列中,并且一个或多个线程将项目从队列中弹出并处理它们.为了避免内存不足,我希望生产者线程在队列变满时休眠.有些项目的优先级高于其他项目,所以我希望首先处理这些项目.如果项目具有相同的优先级,我希望首先添加的项目首先被处理.

我想在WPF DataGrid中显示前100个项目,因此它也需要由UI线程访问.如果它可以通知UI线程也有更新,即实现IObservable,那将会很好.

是否有容器类可以完成所有这些操作?

对于奖励积分,我很确定在排队和出队时都不需要锁定整个队列.

.NET 4实现很好.

Sea*_*ett 2

如果您使用 .NET 4,您应该认真考虑带有自定义调度程序的任务并行库,例如示例QueuedTaskScheduler。我不确定它是否满足您的所有要求,但这将是一个好的开始。