[英]Task Parallel Library ArgumentException
我试图使用任务并行库来按单元格构建Matrix单元格。
我有以下代码执行此操作:
List<Campaign> campaigns = GetHomeCampaigns();
Dictionary<int, string> sellers = GetHomeSellers();
int numTasks = campaigns.Count*sellers.Count;
Task<MatrixCell<string>>[] statusTasks = new Task<MatrixCell<string>>[numTasks];
int count = 0;
for(int i = 0; i < campaigns.Count -1;i++)
{
for(int j = 0; j < sellers.Count -1;j++)
{
Func<MatrixCell<string>> getStatus = () => GetStatus(campaigns[i].CampaignID, sellers.ElementAt(j).Key);
statusTasks[count] = Task.Factory.StartNew(getStatus);
count++;
}
}
Task.WaitAll(statusTasks);
我试图做的是并行处理和确定每个单元格,然后一旦完成它们,逐行组装Matrix,其他代码与此示例无关。
我现在面临的问题是以下几行
Task.WaitAll(statusTasks)
我收到以下ArgumentException
The tasks array included at least one null element.
Parameter name: tasks
我检查了数组,它显示statusTasks中存在的所有项目。
不确定在哪里可以看。
谢谢,
在基于0的索引语言中使用for
循环时,不需要执行< .Count - 1
。 那应该是:
for (int i = 0; i < campaigns.Count; i++)
由于它<
而不是<=
,它已经确保最后一项是campaigns[campaigns.Count - 1]
。
如果您真的想使用TPL,请考虑使用Parallel类:
Parallel.For(0, campaigns.Count, i => // the outer loop is most important
{
Parallel.For(0, sellers.Count, j =>
{
GetStatus(campaigns[i].CampaignID, sellers.ElementAt(j).Key);
}
}));
// no Waiting here
这将使用一个分区程序,它可能决定不为每个j
使用一个任务,而是构建分段。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.