2012-10-06 11 views

risposta

10

Poiché Task s utilizza il sottostante ThreadPool (a meno che non sia contrassegnato come lungo), non è consigliabile utilizzarli quando si utilizza un ThreadPool non consigliato ad es.

  • lunghe operazioni di I/O che ostruiscono la coda delle attività e impediscono l'esecuzione di altre attività.
  • esecuzione di operazioni che richiedono l'identità del thread come l'impostazione dell'affinità.
+1

L'affinità del thread è un ottimo punto, anche se raramente si presenta. –

+0

+1 per aver menzionato l'IOS di lunga durata. –

+4

Mi raccomando di continuare a utilizzare le attività per operazioni di lunga durata, purché vengano contrassegnate con LongRunning. –

6

Questo è andato nel dettaglio qui: Should I notice a difference in using Task vs Threads in .Net 4.0?

Questa grande differenza è che il TaskFactory utilizza il pool di thread, quindi se avete un sacco di compiti che non possono iniziare immediatamente. Devono aspettare l'esecuzione di un thread gratuito. Nella maggior parte dei casi questo è accettabile ..

I thread verranno eseguiti immediatamente non appena viene chiamato. Start(), hardware permettendo.

Supponendo che il pool di thread sia corretto, le attività offrono molti vantaggi tra cui cancellazione, ContinueWith, OnSuccess, OnError, Exception aggregation e WaitAll per citarne alcuni in cima alla mia testa.

+1

I thread saranno pronti immediatamente non appena viene chiamato. Start(). Eseguiranno quando è disponibile un core, che è spesso 'instant-ish' –

+0

Un buon punto, dovrei chiarire che i thread sono hardware limitati mentre i task sono software limitati. – Dharun

+0

Grazie Dharun. Il post del blog sembra avere un buon confronto tra vari approcci. http://nitoprograms.blogspot.ca/2010/08/various-implementations-of-asynchronous.html – imak

Problemi correlati