Я только начал использовать TPL и хочу, чтобы несколько вызовов веб-сервисов выполнялись параллельно. Из того, что я могу собрать, я вижу два способа сделать это.
Либо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
//...
});
Или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.
Независимо от того, правильный синтаксис или нет, они эквивалентны?
Дадут ли они тот же результат? Если нет, то почему? и что предпочтительнее?