有人知道为什么这段代码会返回超出范围的异常吗?
例如,如果leastAbstractions列表实例具有count == 10,则循环将执行11,并以i = 10结束并返回此异常。
for (int i = 0; i < leastAbstractions.Count; i++)
{
Task.Factory.StartNew((object state) =>
{
this.Authenticate(new HighFragment(leastAbstractions[i])).Reactivate();
}, TaskCreationOptions.PreferFairness);
} 发布于 2011-01-29 20:00:49
您的循环实际上并没有执行11次-它只执行了10次,但是当其中一些任务执行时,我==了10次。
这是一个正常的问题--你在一个lambda表达式中捕获一个循环变量。只需复制一份计数器,并将其捕获:
for (int i = 0; i < leastAbstractions.Count; i++)
{
int copy = i;
Task.Factory.StartNew((object state) =>
{
this.Authenticate(new HighFragment(leastAbstractions[copy]))
.Reactivate();
}, TaskCreationOptions.PreferFairness);
}这样,当您的任务执行时,您将看到所捕获的copy的“实例”的当前值-与i的值不同,该值永远不会更改。
请参阅Eric Lippert的博客文章:part 1;part 2。
https://stackoverflow.com/questions/4836721
复制相似问题