Ho un oggetto che richiede molta inizializzazione (1-2 secondi su una macchina robusta). Anche se una volta inizializzato ci vogliono solo circa 20 millisecondi per fare un tipico "lavoro"Modo corretto per avere un thread infinito di lavoro?
Per evitare che venga reinizializzato ogni volta che un'app vuole usarlo (che potrebbe essere 50 volte al secondo o no a tutti per i minuti nell'uso tipico), ho deciso di dargli un job que, e farlo girare sul proprio thread, controllando se ci sono dei lavori per farlo in que. Tuttavia non sono del tutto sicuro di come realizzare un thread che funziona indefinitamente con o senza lavoro.
Ecco quello che ho finora, ogni critica è accolto
private void DoWork()
{
while (true)
{
if (JobQue.Count > 0)
{
// do work on JobQue.Dequeue()
}
else
{
System.Threading.Thread.Sleep(50);
}
}
}
Dopo pensiero: Stavo pensando posso avere bisogno di uccidere questa discussione con grazia Insead di farlo funzionare sempre, quindi penso di aggiungere una Tipo di lavoro che indica la fine del thread. Anche i pensieri su come terminare un thread come questo sono apprezzati.
Coda classica, blocco e pulsazione. –
+1 molto bello ... –
Perché scrivere qualcosa che è già stato scritto? Pfx, piccola. – Will