Работает не так как ожидалось C# Threading
Код готов к запуску. Возвращает не то что ожидается. Ожидается двумерный в первом уровне многомерного. Но работает только с костылём и возвращает немного не то. Я думаю по коду больше видно что я хотел. В отладчике будет неожиданный выход заграницы objArray без костыля.
using System;
using System.Threading;
namespace MyProgram
{
class Program
{
static void Main(string[] args)
{
int[] arr = { 4, 5, 6, 2 };
int[] arr2 = { 4, 5, 6, 2 };
int n = 2;
int step = arr.Length / n;
// Создаем массив для хранения результатов обработки каждой части массива
int[][][] objArray = new int[n][][];// ЕСЛИ ЗАМЕНИТЬ ТУТ n НА n+1 ТО РАБОТАЕТ, НО
// НА ВЫХОДЕ ОБЬЕКТ С ТРЕМЯ ЭЛЕМЕНТАМИ ВМЕСТО 2
// Создаем потоки для каждой части массива и запускаем их параллельно
Thread[] threads = new Thread[n];
for (int pIndex = 0; pIndex < n; pIndex++)
{
Console.WriteLine(pIndex);
int startIdx = pIndex * step;
int endIdx = (pIndex + 1) * step - 1;
threads[pIndex] = new Thread(() => {
// Выполняем операции над текущей частью массива
int[][] result = DoSomething();
// Сохраняем результат в массив результатов
objArray[pIndex] = result;
});
threads[pIndex].Start();
}
// Ждем завершения всех потоков
foreach (Thread thread in threads)
{
thread.Join();
}
static int[][] DoSomething(){
int[][] numbers = new int[3][];
numbers[0] = new int[] { 1, 2, 3 };
numbers[1] = new int[] { 4, 5, 6, 7 };
numbers[2] = new int[] { 8, 9 };
return numbers;
}
}
}
}