【发布时间】:2011-09-07 17:38:20
【问题描述】:
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
MyClass myClass = new MyClass();
myClass.StartTasks();
}
}
class MyClass
{
int[] arr;
public void StartTasks()
{
arr = new int[2];
arr[0] = 100;
arr[1] = 101;
for (int i = 0; i < 2; i++)
{
Task.Factory.StartNew(() => WorkerMethod(arr[i])); // IndexOutOfRangeException: i==2!!!
}
}
void WorkerMethod(int i)
{
}
}
}
似乎 i++ 在循环迭代完成之前又执行了一次。为什么会出现 IndexOutOfRangeException?
【问题讨论】:
-
+1:这很有趣!很棒的一段代码,复制粘贴,我可以自己测试。
-
显然微软也注意到了,这种行为很愚蠢,他们修复了它。在 C# 5.0 中,上述代码将按预期工作:-D
-
很高兴有人以前严重遇到过这个问题......只是觉得我完全愚蠢,for循环超出范围哈哈。赞成。非常有用的问题。