我正在使用具有阻塞队列的单个生产者 - 单一消费者模型。我希望生产者在生产完成后,等待队列在返回之前清空。
我实施了Marc Gravell提出的BlockingQueue here。
在我的模型中,生产者(渲染器)正在使用事件来通知工作者(打印机)何时正在呈现文件(工作人员对项目进行排队)以及何时呈现(完成)每个文件。
现在,当渲染器完成时,方法结束并且工作人员被杀死,所以我最终得到了10-15个尚未打印的渲染文件。
我希望已完成的事件处理程序阻塞,直到队列被清空为止,例如,打印所有文件时。我想添加类似“WaitToClose()”方法的东西,它将阻塞直到队列为空。
(将工作线程设置为IsBackground = true
会有所作为吗?)
答案 0 :(得分:4)
如何将事件添加到队列中:
private AutoResetEvent _EmptyEvent = new AutoResetEvent(false);
然后修改队列以在事件为空时设置事件,并且可以阻止事件。
进一步思考,当队列为空时,打印机仍然会打印最后一个项目。
那么,你可以加入(阻止)工作线程。
更简单的想法:只是阻塞工作线程,并在队列为空时让工作线程完成(退出)?