0
我使用Task.Factory.StartNew異步調用Sync方法。一旦異步完成,我需要它的結果。我並行運行這個任務,每個結果在下面的結果相結合 -在C#中返回錯誤計數結果的任務
public List<Nomination> Submit(List<Nomination> nominations, string userEmail)
{
var sublist = new List<Nomination>();
int nSize = 5;
var submitedList = new List<Nomination>();
List<Task> tasks = new List<Task>();
for (int index = 0; index < nominations.Count; index += nSize) // No nominations in a batch
{
sublist = nominations.GetRange(index, Math.Min(nSize, nominations.Count - index));
//SubmitNomination is sync method which does some db operation and returns a List<Nomination>
Task<List<DTO.FeedbackRequest>> task = Task.Factory.StartNew(() => { return SubmitNomination(sublist, userEmailName); });
Task cont = task.ContinueWith(submitted => {
submitedList.AddRange(submitted.Result);
});
tasks.Add(cont);
}
Task.WaitAll(tasks.ToArray());
return submitedList;
}
當我看到submitedList,我收到清單的計數改變所有的時間。它假設是作爲輸入的提名數。
請你讓我知道如何解決這個問題。
非常感謝,包括Thirumalai中號
您可能需要通過鎖定對其他線程的變化,以保護所提交的名單。 – BugFinder
請注意,[StartNew](http://blog.stephencleary.com/2013/08/startnew-is-dangerous.html)和[ContinueWith](http://blog.stephencleary.com/2013/10/continuewith -is-dangerous-too.html)可以讓你在UI線程上運行代碼,當你期望它在後臺線程上運行時,你應該總是傳入一個'TaskSchedueller'來確保它沒有或者使用Task .Run('代替'StartNew' –
相關:https://stackoverflow.com/questions/9877358/multiple-threads-adding-elements-to-one-list-why-are-there-always-fewer-items-一世 –