.NET 4.x Массивы задач - C#

Узнай цену своей работы

Формулировка задачи:

В общем, необходимо распараллелить генерацию и обработку массива данных. Почитал про задачи, потоки, TPL, вроде бы проникся, начал писать непосредственно код, и столкнулся с проблемами (код привожу обобщенный).
        List<Point> startValues;
        List<Task> taskList;
        int N;
        void Init()//инициализирую
        {
            startValues = new List<Point>();
            taskList = new List<Task>();
            N = 20;
        }
        void GenerateData(int num)//непосредственно генерация
        {
            Random rand = new Random();
            for (int i = 0; i < 50000 / N; i++)
            {
                parallelData[num].Add(new Point((double)(rand.Next(200) - 100) / 100.0, (double)(rand.Next(200) - 100) / 100.0));
            }
        }
        void Gen()//попытка параллелить
        {
            for (int i = 0; i < N; i++)
            {
                parallelData.Add(new List<Point>());
                taskList.Add(Task.Factory.StartNew(() => GenerateData(i)));
            }
            Task.WaitAll(taskList.ToArray());
            ConcatData();
        }
        void ConcatData()//объединение сгенерированных массивов в один
        {
            for (int i = 0; i < N; i++)
            {
                startValues.AddRange(parallelData[i]);
            }
        }
Однако подобный код не работает, вылетает AggregateException. StackOverFlow советует добавить следующий код, и эксепшн действительно прекращает вылетать:
            try
            {
                Task.WaitAll(taskList.ToArray());
            }
            catch (AggregateException)
            {
 
            }
Однако, данные не генерируются. Писать напрямую в генерируемый массив пробовал, но подобный код вызывает гонку, и необходимое число элементов не набирается. Просьба знатокам помочь разобраться.

Решение задачи: «.NET 4.x Массивы задач»

textual
Листинг программы
int x = i;
taskList.Add(Task.Factory.StartNew(() => GenerateData(x)));

Оцени полезность:

6   голосов , оценка 3.667 из 5
Похожие ответы