如题,
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里的任务之前程序就进入下一循环了。自问自答,脑子有坑,哈哈