具体代码如下:
Task[] tasks = new Task[renwuShu];
for (int i = 0; i < renwuShu; i++)
{
tasks[i] = new Task<DataSet>(() => dobidui(xzhdas[i], das[i], i));
tasks[i].Start();
}
Task.WaitAll(tasks);
提示:IndexOutOfRangeException: 索引超出了数组界限。
截图如下:
申明一个curi变量存i的值,task中任务使用curi这个变量,不要直接使用i,因为task未执行前i已经循环完毕了,i值为最大值rewuShu,导致越界了
如果题主学过js,js闭包问题就是和题主这代码一样导致的,js需要做一个闭包或者let申明一个变量,C#可以用临时变量存储起来(类似js的let)
Task[] tasks = new Task[renwuShu];
for (int i = 0; i < renwuShu; i++)
{
var curi=i;/////
tasks[i] = new Task<DataSet>(() => dobidui(xzhdas[curi], das[curi], curi));
tasks[i].Start();
}