eofd007 发表于 2016-6-14 14:19:01

索引超出了数组界限

在按钮的单击事件 button_Starts_Click 中,调试时打断点出现这个情况:当i的值为4时for循环执行完了之后,在这句 myResultTask.Wait();执行了之后居然又进入了for循环,我觉得有点奇怪。请指点一下,谢谢!代码很少,请看附件








ibcadmin 发表于 2016-6-14 14:37:17

   myResultTask.Wait();走到这等了好久 被卡住了

eofd007 发表于 2016-6-14 14:42:39

ibcadmin 发表于 2016-6-14 14:37
myResultTask.Wait();走到这等了好久 被卡住了


如图所示,调试时在这两行下断,发现出现这个情况:当i的值为4时for循环执行完了之后,在这句 myResultTask.Wait();执行了之后居然又进入了for循环,感觉太奇怪了

ibcadmin 发表于 2016-6-14 15:56:57



我调试了代码,发现的问题是,报错的时候 i=5 ,
所以myTokenSources的时候肯定是出现索引超出界限,myTokenSources是0-4
我现在也搞不懂 , i=5的时候 为什么会进for循环。

eofd007 发表于 2016-6-15 10:17:35

ibcadmin 发表于 2016-6-14 15:56
我调试了代码,发现的问题是,报错的时候 i=5 ,
所以myTokenSources的时候肯定是出现索引超出界 ...

是啊,很奇怪,还麻烦你帮我看看啊

eofd007 发表于 2016-6-15 10:18:14

ibcadmin 发表于 2016-6-14 15:56
我调试了代码,发现的问题是,报错的时候 i=5 ,
所以myTokenSources的时候肯定是出现索引超出界 ...

是啊,很奇怪,还麻烦你帮我看看啊

ibcadmin 发表于 2016-6-15 12:33:10

    Task<string[]> myResultTask = Task.WhenAll<string>(myTasks);
            myResultTask.Wait();

问题还是在这句话里,我把    myResultTask.Wait();删掉后能正常执行,我的个人观点是,你在循环中给 myTasks.Start(); 开启,是一个一个开启的。但是等待的时候,是批量等待的,所以觉得问题出在这,至于怎么解决....我就无能为力了..

eofd007 发表于 2016-6-15 14:40:04

ibcadmin 发表于 2016-6-15 12:33
Task myResultTask = Task.WhenAll(myTasks);
            myResultTask.Wait();



哦,有一定道理。虽然很难解决,但是还是谢谢老大了!
页: [1]
查看完整版本: 索引超出了数组界限