C# for循环i<5 ,在Task.Factory.StartNew中i为啥能超出范围?

如题,

img

img

tasks[i] = Task.Factory.StartNew(delegate { renwu(taskid, luInfos, MyWebClient[i]); });renwu()中的i的值为什么能取到5
有没有办法避开这种错误

闭包自由参数穿越,曾经有人说书上说的“C#不会产生闭包穿越”,但是我们实际一线开发可以肯定的说,闭包情况的自由变量穿越在C#里完全存在。

解决方法:传统手段,当参数传递进去(不和陌生人说话尽量不使用外面不认识的人,除非你确保绝对安全)

 Task.Factory.StartNew(client =>
                {
                    WebClient _client = (client) client;
                },xxxx[i])

循环最后加Thread.Sleep(50),貌似就好了,原因可能是在执行Task里的任务之前程序就进入下一循环了。自问自答,脑子有坑,哈哈