Кто-нибудь знает, почему этот код возвращает исключение из диапазона?
Например, если экземпляр leastAbstractions
List имеет count == 10
, цикл выполнит 11
раз, заканчивая i = 10
, и возвращает это исключение.Параллельный код бросает OutOfRangeException
for (int i = 0; i < leastAbstractions.Count; i++)
{
Task.Factory.StartNew((object state) =>
{
this.Authenticate(new HighFragment(leastAbstractions[i])).Reactivate();
}, TaskCreationOptions.PreferFairness);
}
Я думал, что счетчик передается в качестве аргумента сразу при создании новой задачи. Наверное, я ошибся. Благодарю. – pevogam
@blaze: Вы используете счетчик * в выражении лямбда *. Когда выполняется выражение лямбда, используется значение * current * того, что вы захватываете. Это должно произойти в другом потоке, потому что это выражение лямбда - это то, что ваша задача должна делать. –