Como esperar por um bloqueio de fila para ser esvaziado por trabalhador
-
16-09-2019 - |
Pergunta
Eu estou usando um único modelo de consumidor produtor-single com uma fila de bloqueio. Eu gostaria que o produtor, quando ele tiver terminado produzindo, para aguardar na fila para esvaziar antes de retornar.
implementei a BlockingQueue sugeriu aqui por Marc Gravell.
No meu modelo, o produtor (processador) está usando eventos para notificar o trabalhador (impressora) quando um arquivo foi está sendo processado (filas de trabalho do item) e quando cada arquivo foi proferida (terminado).
Agora, quando o representante é feito, as extremidades do método e o trabalhador é morto, assim que eu acabar com 10-15 arquivos prestados que não foram impressos.
Eu quero que o manipulador de eventos acabado para bloquear até que a fila foi esvaziado, por exemplo, quando todos os arquivos são impressos. Quero acrescentar algo como um "WaitToClose ()" método que irá bloquear até que a fila está vazia.
(Would tendo o conjunto segmento de trabalho para IsBackground = true
fazer a diferença?)
Solução
Como sobre a adição de um evento para a fila:
private AutoResetEvent _EmptyEvent = new AutoResetEvent(false);
Em seguida, modificar a fila para definir o evento quando ele está vazio, e você pode bloquear sobre o evento.
Pensando que através de mais, no entanto, quando a fila está vazia, a impressora ainda estará imprimindo o último item.
Assim, então você poderia juntar (bloco) sobre o segmento de trabalho.
idéia mais simples: bloco apenas no segmento de trabalho, e ter o acabamento linha de trabalho (saída) quando a fila está vazia
?