在并行 For 循环中,当使用 lambda 表达式访问捕获变量时,可能会出现错误。为避免这种情况,可以将捕获变量复制到局部变量中,并在 lambda 表达式中使用该局部变量。
以下是示例代码:
List myList = new List() { 1, 2, 3, 4, 5 };
int errorValue = 0;
Parallel.For(0, myList.Count, i =>
{
int localValue = myList[i];
// 使用 localValue,而不是 myList[i],来避免捕获变量的问题
if (localValue == 3)
{
errorValue = localValue;
}
});
if (errorValue != 0)
{
Console.WriteLine($"Error: {errorValue} captured in loop");
}