Ваш цикл не на самом деле выполняется 11 раз - он выполняется только 10 раз, но я == 10 к тому времени, когда некоторые из этих задач выполняются.
Это нормальная проблема -вы захватываете переменную цикла в лямбда-выражении.Просто возьмите копию счетчика и запишите его:
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
.
См. сообщения Эрика Липперта в блоге по этому вопросу: part 1 ; часть 2 .