Na stronie 33 książki Stephena Toub zaZadanie vs AsParallel()
http://www.microsoft.com/download/en/details.aspx?id=19222
Jest kod
var pings = from addr in addrs.AsParallel().WithDegreeOfParallelism(16)
select new Ping().Send(addr);
foreach (var ping in pings)
Console.WriteLine("{0}: {1}", ping.Status, ping.Address);
i według Stefana lepsza wersja
var pings = (from addr in addrs
select new Ping().SendTask(addr, null)).ToArray();
Task.WaitAll(pings);
foreach (Task<PingReply> ping in pings)
Console.WriteLine("{0}: {1}", ping.Result.Status, ping.Result.Address);
Stephen mówi, że druga opcja jest lepsza, ponieważ "abstrakcja zadań może być również używana do reprezentowania Operacje związane z I/O i bez wiązania wątku w procesie . "
Ale czy zadanie po prostu nie korzysta z Threadpool (a więc po prostu za pomocą wątków) pod spodem? Więc w rzeczywistości przywiązujesz wątek?
"Zadanie nie korzysta po prostu z Threadpool" - to nie byłaby abstrakcja. –