我們有一個webservice函數,它在後臺運行任務列表。所有任務完成後,它將返回。我再訪功能C#5,我已經成功地得到了下面的代碼片段工作:做使用async/await重寫多線程等待
var result = new List<int>();
var tasks = new List<Task<int>>();
foreach (var row in rowlist)
tasks.Add(Task.Factory.StartNew(() => DoWork(row)));
foreach (var task in tasks)
result.Add(task.Result);
的task.Result
等待單個任務。我已經測試了這個方法,爲DoWork
方法添加了3秒的延遲,並驗證了它在不到5秒的時間內完成了10個任務的列表。
現在我試着用新的async/await
語法來重寫函數。但我似乎無法讓它工作。如果編譯,它會同步運行,通過添加等待來驗證。
有關如何使用async/await
重寫上述代碼片段的任何想法?
這運行異步。但它會導致'System.AggregateException',內部異常'{「查詢結果不能被枚舉超過一次。」}「任何想法? – Andomar
也許更重要的是:如果你用'await'省略這行,爲什麼它會同步運行? – Andomar
@Andomar在創建任務時,在選擇後調用'ToList'。這應該可以解決這個錯誤。目前,當枚舉幾次「任務」時,它會嘗試兩次創建新任務,這很糟糕。 – Servy