编程语言
首页 > 编程语言> > c# – 如何等待工作人员清空阻塞队列

c# – 如何等待工作人员清空阻塞队列

作者:互联网

我正在使用具有阻塞队列的单个生产者 – 单一消费者模型.我希望生产者在生产完成后,等待队列在返回之前清空.

我实施了由Marc Gravell建议的BlockingQueue here.

在我的模型中,生产者(渲染器)正在使用事件来通知工作者(打印机)何时正在呈现文件(工作人员对项目进行排队)以及何时呈现(完成)每个文件.

现在,当渲染器完成时,方法结束并且工作人员被杀死,因此我最终得到了10-15个尚未打印的渲染文件.

我希望已完成的事件处理程序阻塞,直到队列被清空为止,例如,当打印所有文件时.我想添加类似“WaitToClose()”方法的东西,它将阻塞直到队列为空.

(将工作线程设置为IsBackground = true会产生影响吗?)

解决方法:

如何向队列添加事件:

private AutoResetEvent _EmptyEvent = new AutoResetEvent(false);

然后修改队列以在事件为空时设置事件,并且可以阻止事件.

然而,进一步思考,当队列为空时,打印机仍将打印最后一项.

那么,你可以加入(阻止)工作线程.

更简单的想法:只是阻塞工作线程,并在队列为空时让工作线程完成(退出)?

标签:c,queue,blocking,producer-consumer
来源: https://codeday.me/bug/20190627/1301847.html