#c_sharp
var tasks = new Task[queenCount]; for (int i = 0; i < queenCount; i++) tasks[i] = Task.Run(() => CalculatePeacefulArrangement(queenCount, chessTables[i], queenCount, resultArray, i)); Task.WaitAll(tasks); И например, прописав от руки все вызываемые методы через Parallel.Invoke все работает.
Ответы
Ответ 1
for (int i = 0; i < queenCount; i++) { int index = i; tasks[i] = Task.Run(() => CalculatePeacefulArrangement(queenCount, chessTables[index], queenCount, resultArray, index)); } Переменная i, которая в цикле захватывается анонимными лямбда-функциями (в Вашем коде), - одна на всех. К моменту исполнения этих анонимных функций значение i с большой вероятностью изменилось. Даже если Вы не получили выход за границу массива, значение этой переменной в момент вызова CalculatePeacefulArrangement - не то, что Вы ожидаете. С переменной index, объявленной внутри блока, каждая анонимная функция видит свой экземпляр index, имеющий значение, которое присвоено переменной index на соответствующей итерации цикла.
Комментариев нет:
Отправить комментарий