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-一世 –