for (int i = 0; i < count; i++)
{
int a = i;
tasks[a] = Task.Factory.StartNew(() => dosomething(out temps[a], (length / count) * a, (length / count) * (a + 1), bytImages));
// tasks[i] = Task.Factory.StartNew(() => dosomething(out temps[i], (length / count) * i, (length / count) * (i + 1), bytImages));
}
为什么必须定义一个新的变量a ,直接用i的话就提示数组越界
这个主要是闭包引起的。因为dosomething没有立即执行,当执行的时候,使用temps[i],这个时候的i=count已经越界了,导致了数组越界这样的错误。
为什么就越界了,我感觉你说的很有道理,不过我还是不太理解呢,能再说详细点吗,谢谢
@晨冬之雪: 就是新建Task内部方法,是一个方法引用。真正执行的时候,去拿i的值,这个i是方法体外部的。已经变成越界了。js里面很容易产生这样的闭包。
@幻天芒: 恩,谢谢,以前知道js里有闭包,c#之前还真没有注意闭包问题呢
@晨冬之雪: 这个不太容易遇到,呵呵~