Jaka jest główna różnica między dwoma z następujących metod:Różnica między ThreadPool.QueueUserWorkItem a Parallel.ForEach?
ThreadPool.QueueUserWorkItem
Clients objClient = new Clients();
List<Clients> objClientList = Clients.GetClientList();
foreach (var list in objClientList)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(SendFilesToClient), list);
}
System.Threading.Tasks.Parallel ForEach
Clients objClient = new Clients();
List<Clients> objClientList = Clients.GetClientList();
Parallel.ForEach<Clients>(objClientList, list =>
{
SendFilesToClient(list);
});
jestem nowy wielowątkowość i chcą wiedzieć, co się stanie w każdym przypadku (pod względem procesu realizacji) jaki jest poziom wątku dla każdego podejścia? Pomóż mi zwizualizować oba procesy.
SendFilesToClient: pobiera dane z bazy danych, konwertuje do programu Excel i wysyła plik Excela do danego klienta.
Dzięki!
Dzięki za szczegółowe wyjaśnienie @ Reed. Dwa pytania: 1) Dlaczego blok jest ważny (byłoby wspaniale, gdybyś mógł odpowiedzieć w odniesieniu do mojego kodu)? 2) Dalsze rozszerzenie głównego pytania, czy jest jakaś dodatkowa korzyść z używania PLINQ przez Parallel.ForEach? – Learner
@ Mihir 1) blokowanie jest po prostu inne. Wątek, który właśnie uruchomisz, będzie czekał na zakończenie Parallel.ForEach przed uruchomieniem następnego wiersza kodu, ale kod foreach/TP.QUWI nie będzie czekać. 2) Brak korzyści, inny niż potencjalnie prostszy kod do zrozumienia –
Wielki, dzięki za wyjaśnienie ponownie! – Learner