Właśnie zacząłem używać licencji TPL i chcę wykonywać kilka połączeń z usługami sieciowymi równolegle. Z tego, co mogę zebrać, widzę dwa sposoby robienia tego.Jaki byłby lepszy sposób korzystania z biblioteki zadań równoległych
Albo Parallel.ForEach
:
List<ServiceMemberBase> list = new List<ServiceMemberBase>(); //Take list from somewhere.
Parallel.ForEach(list, member =>
{
var result = Proxy.Invoke(member);
//...
//Do stuff with the result
//...
});
Albo Task<T>
:
List<ServiceMemberBase> list = new List<ServiceMemberBase>(); //Take list from somewhere.
ForEach(var member in list)
{
Task<MemberResult>.Factory.StartNew(() => proxy.Invoke(member));
}
//Wait for all tasks to finish.
//Process the result objects.
Pomijając czy składnia jest poprawna, czy nie są one do equivilant?
Czy dadzą taki sam wynik? Jeśli nie, dlaczego? a który jest lepszy?
Dziękuję za odpowiedź. Skończyło się na używaniu Parallel.ForEach i widzimy poprawę o około 25% w czasie reakcji na naszą produkcję - 16 podstawowych maszyn.Domyślam się, że większość korzyści wynika z równoległego przetwarzania danych, a nie z równoległych połączeń z usługami sieciowymi. –