Comprendo che il nuovo TPL (Task Parallel Library) ha implementato Parallel.ForEach() in modo che funzioni con "parallelismo espresso". Il che significa che non garantisce che i tuoi delegati eseguiranno più thread, ma controllerà per vedere se la piattaforma host ha più core, e se è vero, solo allora distribuisce il lavoro attraverso i core (essenzialmente 1 thread per core) ..NET 4 ... Parallel.ForEach() domanda
Se il sistema host non ha più core (diventando sempre più difficile trovare un computer di questo tipo), eseguirà il codice in modo sequenziale come farebbe un normale ciclo foreach. Roba carina, francamente.
Normalmente vorrei fare qualcosa di simile a quanto segue per posizionare la mia operazione lungo in esecuzione su un thread in background dal ThreadPool:
ThreadPool.QueueUserWorkItem (nuova WaitCallback (targetMethod), nuova Object2PassIn());
In una situazione in cui il computer host ha un solo core, il Parallel.ForEach() del TPL posiziona automaticamente l'invocazione su un thread in background? Oppure, dovrei invocare manualmente qualsiasi chiamata TPL da uno sfondo in modo tale che se eseguo da un singolo core computer almeno quella logica sarà fuori dal thread di dispacciamento della GUI?
La mia preoccupazione è che se lascio il TPL responsabile di tutto questo voglio assicurare se determina si tratta di una singola cassa d'anima che marshalling ancora il codice che c'è dentro del ciclo Parallel.ForEach() su un thread in background come avrei fatto, in modo da non bloccare la mia GUI.
Grazie per ogni pensiero o consigli si possono avere ...
Solo un rapido follow-up su questo: TPL Rocks! Non riesco a superare quanto sono più veloce a realizzare varie app con pochi piccoli aggiustamenti utilizzando le chiamate TPL rispetto alla tariffa "standard". Sto osservando i tempi di elaborazione su vari articoli ridotti dell'80%. MS lo ha davvero buttato fuori dal parco su questo - ottimo lavoro ragazzi. – BonanzaDriver