-E sembra che classe Task ci forniscono la possibilità di utilizzare su più processori nel sistema.
-se i thread possono/possono essere eseguiti su più core, cosa c'è di così speciale in Parallelismo di attività?
La classe Task
è solo una piccola, ma importante, parte di TPL (Task Parallel Library). TPL è un'astrazione di alto livello, quindi non devi lavorare direttamente con i thread. Incapsula e nasconde la maggior parte del churn che dovresti implementare per qualsiasi applicazione multi-thread decente.
Le attività non introducono alcuna nuova funzionalità che non è possibile implementare da soli, di per sé (che è il nucleo delle vostre domande, credo). Possono essere sincroni o asincroni: quando sono asincroni, utilizzano la classe Thread
internamente o le porte IOCP.
Alcuni dei punti affrontati da TPL sono:
- rigenerare eccezioni un filo bambino sul thread chiamante.
- codice asincrono (filo lancio -> eseguire codice arbitrario in attesa di thread figlio -> curriculum quando thread figlio è finita), sembra come se fosse sincrona, migliorando notevolmente la leggibilità e la manutenibilità
- più semplice filo cancellazione (usando
CancellationTokenSource
)
- query parallele/manipolazione dei dati utilizzando PLINQ o la classe
Parallel
- Asynchronous flussi di lavoro mediante TPL Dataflow
Questo è probabilmente o/S dipendente e non determinato dal framework .Net. Sarebbe bello saperlo con certezza. – Polyfun
Tieni presente che le attività di default sono pensate per attività molto veloci (meno di 200 ms); il parallelismo/concorrenza così legato all'elaborazione non dovrebbe essere un grande requisito. Se * si * desidera disporre di attività parallele/concomitanti, con esecuzione prolungata, preferire Task.Run su TaskFactory.StartNew ed essere causa per utilizzare un overload che accetta 'TaskCreationOptions' e utilizzare' TaskCreationOptions.LongRunning'. In caso contrario, potrebbero verificarsi effetti negativi sul pool di thread che potrebbe annullare lo scopo della concorrenza. –
Eventualmente correlato: http://stackoverflow.com/q/12328751 – stakx