2016-06-14 263 views
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中號

+0

您可能需要通過鎖定對其他線程的變化,以保護所提交的名單。 – BugFinder

+0

請注意,[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' –

+0

相關:https://stackoverflow.com/questions/9877358/multiple-threads-adding-elements-to-one-list-why-are-there-always-fewer-items-一世 –

回答