c# task 多任务 waitall异常,请教如何修改?

具体代码如下:

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: 索引超出了数组界限。
截图如下:

img

申明一个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();
            }
 


img

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632