Il parallelismo è uno strumento molto importante da avere nella tua cintura, ma per impararlo bene devi usarlo molto finché non ne prendi il controllo. Sei fortunato ad usare C # perché TPL è la più grande libreria che abbia mai visto e combinato con LINQ e estensioni di metodo è semplicemente killer.
Rispondere specificamente alle tue domande.
Quando dovrei usarlo?
Ci sono fondamentalmente due motivi per cui potresti voler usare TPL:
-
Elaborazione in background: vuoi assicurarti che la tua applicazione sia ancora reattiva mentre esegui un'operazione che potrebbe richiedere del tempo. Devi studiare e capire come effettuare chiamate in modo asincrono.
-
Elaborazione parallela: vuoi assicurarti che diversi thread vengano utilizzati per eseguire le attività in parallelo, facendo in modo che il tuo codice funzioni più velocemente (che funziona meglio su sistemi multi-core).
TPL ti aiuterà molto in entrambi gli scenari (C # 5.0 ha alcuni nuovi trucchi speciali che trasformano la programmazione asincrona in cose da bambini).
Ci sono delle buone pratiche?
Sì, ci sono. Ad esempio, per Windows Form è possibile utilizzare BackgroundWorker perché consente di gestire il fatto che non è possibile effettuare alcuna chiamata agli oggetti dell'interfaccia utente al di fuori dei propri thread.
Ce ne sono molti altri, ma varieranno a seconda di cosa stai facendo esattamente (ASP.NET, WPF, Silverlight, WinForms e così via). La maggior parte delle volte utilizzo MSDN e StackOverflow ma il fatto è che più usi la TPL in generale, più acquisirai conoscenza e più facile sarà usarla e sapere quando il parallelismo è una soluzione adeguata o quando non lo è.
Nella maggior parte dei casi è solo una perdita di tempo? È adatto per un tipo specifico di applicazioni?
Non esiste una risposta universale a questa domanda, ogni progetto deve essere messo in prospettiva e analizzato. Esistono certamente tipi specifici di applicazioni più adatti al parallelismo. Nell'elaborazione parallela, ad esempio:
- Giochi
- numero di applicazioni di crunch
- elaborazione di immagini e video
- elaborazione dati
In elaborazione in background qualsiasi tipo di applicazione con un'interfaccia utente e gestisce attività che richiedono più di un paio di secondi. Qui puoi trovare articoli eccellenti su C # 5.0 async:
link
Le applicazioni mobili stanno riportando l'attenzione su questo argomento perché le piattaforme mobili semplicemente non hanno lo stesso livello di potenza di elaborazione dei desktop e solitamente gli utenti hanno una pazienza molto breve durante l'esecuzione di un'app. Vedi questo articolo per esempio su come l'elaborazione in background può creare l'impressione che la tua applicazione sia velocissima:
link
Se vuoi imparare, non c'è niente di meglio che provarlo più e più volte finché non vedi i risultati per te stesso (buoni o cattivi).