Qual è la differenza principale tra due dei seguenti approcci:Differenza tra ThreadPool.QueueUserWorkItem e 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 PerOgni
Clients objClient = new Clients();
List<Clients> objClientList = Clients.GetClientList();
Parallel.ForEach<Clients>(objClientList, list =>
{
SendFilesToClient(list);
});
Sono nuovo di multi-threading e vogliono sapere cosa succederà in ogni caso (in termini di processo di esecuzione) qual è il livello di multi- threading per ogni approccio? Aiutami a visualizzare entrambi i processi.
SendFilesToClient: ottiene i dati dal database, converte in Excel e invia il file Excel per rispettivo client.
Grazie!
Grazie per la spiegazione dettagliata @Reed. Due domande: 1) Perché il blocco è importante (sarebbe bello se tu possa rispondere in relazione al mio codice)? 2) Estendendo ulteriormente la domanda principale, c'è qualche ulteriore vantaggio nell'usare PLINQ su Parallel.ForEach? – Learner
@Mihir 1) il blocco è solo diverso. Il thread in esecuzione attenderà che Parallel.ForEach finisca prima di eseguire la riga successiva del codice, ma il codice foreach/TP.QUWI non attenderà. 2) Nessun vantaggio, diverso dal codice potenzialmente più semplice da capire –
Grande, grazie ancora per la spiegazione! – Learner