Wielowątkowość jest na tyle łatwo dostępna, że programiści próbują zrównoleglić jak największą liczbę zadań. Przykład:
internal class Program { private static void Main(string[] args) { Task.WaitAll(Task.Factory.StartNew(Run1), Task.Factory.StartNew(Run2), Task.Factory.StartNew(Run3)); } private static void Run1() { } private static void Run2() { } private static void Run3() { } }
W tym konkretnym przykładzie, lepsze byłoby prawdopodobnie Parallel.Invoke. Ale nie o to mi chodzi. Nie chciałem pokazywać realnego przykładu, ponieważ zbyt skomplikowałoby to post. Załóżmy, że musimy wykonać kilka zadań równoległe a potem czekać na wynik. Prostym sposobem można zoptymalizować kod, wykonując jedno zadanie na wątku macierzystym. Poprawiony kod:
Task t1 = Task.Factory.StartNew(Run1); Task t2 = Task.Factory.StartNew(Run2); Run3(); Task.WaitAll(t1,t2);
Skoro i tak musimy blokować macierzysty wątek, to nie ma potrzeby tworzyć kolejnego na Run3. Lepiej wykorzystać macierzysty wątek, niż marnować go na czekanie. Oszczędzamy tutaj zmianę kontekstu, co w systemach low-latency\high frequency może mieć znaczenie. Dla wielu biznesowych aplikacji, nie ma to dużego wpływu. Wciąż jednak, lepiej pisać kod wydajniejszy, zwłaszcza, że w tym przypadku jest to po prostu łatwiejsze.