Tôi mới bắt đầu sử dụng TPL và tôi muốn thực hiện một số cuộc gọi đến các dịch vụ web diễn ra song song. Từ những gì tôi có thể thu thập, tôi thấy hai cách để làm điều này.Điều gì sẽ là cách tốt hơn để sử dụng thư viện song song nhiệm vụ
Hoặc 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
//...
});
Hoặc 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.
Bất chấp nếu cú pháp là đúng hay không, đều này để equivilant?
Chúng có tạo ra cùng một kết quả không? Nếu không, tại sao? và đó là thích hợp hơn?
Cảm ơn bạn đã trả lời. Tôi đã kết thúc bằng cách sử dụng Parallel.ForEach và chúng tôi thấy một sự cải thiện khoảng 25% trong thời gian phản ứng trên sản xuất của chúng tôi - 16 lõi máy.Tôi đoán rằng hầu hết các lợi ích là trong xử lý dữ liệu song song, và không phải trong các cuộc gọi song song với các dịch vụ web mình. –