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?)

Foi útil?

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

?
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top