Si tratta di un uso appropriato del ThreadPool? Posso essere sicuro che sarà avviare un thread per ogni attività?

StackOverflow https://stackoverflow.com/questions/719751

Domanda

    protected override void OnStart(String[] args)
    {
        ResultManager.PrepareCache();
        ThreadPool.QueueUserWorkItem(ResultQueue.Process);
        ThreadPool.QueueUserWorkItem(StatusUpdater.UpdateStatus);
        ThreadPool.QueueUserWorkItem(GeneralQueue.RestartHungTests);
        ThreadPool.QueueUserWorkItem(ResultManager.SyncroniseResultsTable);
        ThreadPool.QueueUserWorkItem(GeneralQueue.RecoverLostResults);
        ThreadPool.QueueUserWorkItem(BrowserTestStartInfo.FillQueues);
        ThreadPool.QueueUserWorkItem(MailAppAccount.FillQueues);
    }

Ognuno di questi compiti correre per tutta la durata della vita del servizio di Windows. Ho sempre attaccato al ThreadPool per questo genere di cose, dovrei appena iniziato le discussioni normali? Posso essere certo ThreadPool avrà abbastanza thread disponibili per eseguire ogni compito? Se io SetMaxThreads a 7, posso incorrere in problemi in seguito perché queste discussioni non abortire? E 'sicuro per impostarlo a qualcosa di molto più alto?


Modifica:

Ho sempre voglia tutti i 7 thread per essere in esecuzione contemporaneamente, e non hanno mai abortire - dovrei essere anche utilizzando le discussioni? C'è qualcos'altro più adatto per questo tipo di compito perennemente in esecuzione?

Ogni attività gestisce un particolare metodo ogni x minuti.

È stato utile?

Soluzione

Non si tratta di un uso appropriato del pool di thread. Basta creare discussioni normali, dato che sono di lunga durata. Il sovraccarico di creare i fili non importa, dal momento che sarete creare una sola volta loro.

Altri suggerimenti

Come dice John, questa non è una buona idea. La ragione è che il pool di thread ha un numero limitato di thread, e si sta utilizzando un gran numero di loro e mai restituirli. Il threadpool è stato progettato per l'utilizzo in comune filo per i fili di breve durata.

Non si ha realmente bisogno per gestire i fili poiché vivono la durata dell'applicazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top