Выход за пределы массива во время инициализации Task'ов
Имеется приблизительно такой код:
public async Task MainThread()
{
// Заранее неизвестно, сколько будет создано списков и сколько в каждом списке элментов
List<List<ImportantData>> manyImportantDatas = new List<List<ImportantData>>();
// Наполнение списка
// К примеру, выходит следующий результат:
// manyImportantDatas[0].Count == 2
// manyImportantDatas[1].Count == 1
Task[] taskList = new Task[manyImportantDatas.Count]; // В пределах примера Task[2]
for (int i = 0; i < manyImportantDatas.Count; i++)
{
taskArray[i] = Task.Run(async () =>
{
// Строка ниже внезапно вызывает исключение:
// Index was out of range
List<Parameters> parametersList = new List<Parameters>(manyImportantDatas[i].Count);
foreach (var importantData in manyImportantDatas[i])
{
parametersList[i] = new Parameters()
{
// Заполнение параметров
}
}
await CallOtherAPI(parametersList: parametersList);
});
}
Task.WaitAll(taskArray);
}
Расставив BreakPoint'ы я внезапно увидел, что у меня i == 2. Тогда я прошёлся пошагово по всем строкам, начиная с объявления цикла. Получилась следующая картина:
taskArray[i] = Task.Run(async () => - i == 0,
List<Parameters> parametersList = new List - i == 1
При повторении цикла (а я не понимаю даже почему он повторился, ибо i уже == 1), повторилась та же ситуация, что на строке taskArray[i] = Task.Run(async () => i == 1, а уже на следующей i == 2. Соответственно, "Index was out of range".
Что я сделал неправильно, почему у меня так странно наращивается i?
UPD: Пару раз мне удавалось успеть дойти до Task.WaitAll(taskArray);