首页 文章

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

提问于
浏览
4

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

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

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

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

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

(将工作线程设置为 IsBackground = true 会有所作为吗?)

1 回答

  • 4

    如何向队列添加事件:

    private AutoResetEvent _EmptyEvent = new AutoResetEvent(false);
    

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

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

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

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

相关问题