gpt4 book ai didi

c# - 并行代码抛出 OutOfRangeException

转载 作者:行者123 更新时间:2023-11-30 21:17:21 25 4
gpt4 key购买 nike

有谁知道为什么这段代码会返回超出范围的异常?
例如,如果 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);
}

最佳答案

您的循环不是实际上执行了 11 次 - 它只执行了 10 次,但是当其中一些任务执行时 i == 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 .

关于c# - 并行代码抛出 OutOfRangeException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4836721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com