我正在嘗試使用.NET 4.0任務並行庫,我遇到了任務等待的一些問題。基本上,我想遍歷一個列表,並創建一個Task來調用每個項目的webservice方法,並行執行它們,然後等待所有任務完成。並行任務不等待
我已經嘗試了WaitAll以及等待所有任務一個接一個的模式,並且都沒有工作。 web服務可能全部被並行觸發,但是它似乎沒有等待web服務響應,所以任務跳過等待並完成。
有什麼我在這裏失蹤?
foreach (Item currentItem in ItemList)
{
// create task for webservice call.
Task<Item> itemTask = Task.Factory.StartNew(() =>
{
Item result = Utilities.UpdateItem(currentItem);
return result;
});
// add to the task list.
taskList.Add(itemTask);
}
// create task array
Task[] taskArray = taskList.ToArray();
//wait for tasks to complete
Task.WaitAll(taskArray);
我也曾嘗試以下,作爲一個替代方案爲WaitAll
// wait for all tasks, one-by-one pattern
while (taskList.Count > 0)
{
Task<Item>[] tasks = taskList.ToArray();
int index = Task.WaitAny(tasks);
var result = tasks[index].Result;
taskList.RemoveAt(index);
}
到靜態方法Utilities.UpdateItem
呼叫,基本上建立基於順序web服務調用,修改Item
對象和結果返回它。我發現的是,所有任務都會排隊等待,然後我期待Wait在Web服務調用中花費相當多的時間,這些任務似乎在調用返回之前相對較快地完成。
使用'Parallel.Foreach'會更簡單。我做你想做的事情。 – I4V
「似乎沒有工作」並不告訴我們你觀察到什麼。請發佈簡短但完整的*程序來證明問題。 –
你確定你的代碼還沒有完成,例如:到你默默處理的異常? UpdateItem中的代碼是做什麼的? Task.WaitAll絕對有效,試圖找到錯誤的是浪費時間 –