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

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

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

В общем, необходимо распараллелить генерацию и обработку массива данных. Почитал про задачи, потоки, TPL, вроде бы проникся, начал писать непосредственно код, и столкнулся с проблемами (код привожу обобщенный).
Листинг программы
  1. List<Point> startValues;
  2. List<Task> taskList;
  3. int N;
  4. void Init()//инициализирую
  5. {
  6. startValues = new List<Point>();
  7. taskList = new List<Task>();
  8. N = 20;
  9. }
  10. void GenerateData(int num)//непосредственно генерация
  11. {
  12. Random rand = new Random();
  13. for (int i = 0; i < 50000 / N; i++)
  14. {
  15. parallelData[num].Add(new Point((double)(rand.Next(200) - 100) / 100.0, (double)(rand.Next(200) - 100) / 100.0));
  16. }
  17. }
  18. void Gen()//попытка параллелить
  19. {
  20. for (int i = 0; i < N; i++)
  21. {
  22. parallelData.Add(new List<Point>());
  23. taskList.Add(Task.Factory.StartNew(() => GenerateData(i)));
  24. }
  25. Task.WaitAll(taskList.ToArray());
  26. ConcatData();
  27. }
  28. void ConcatData()//объединение сгенерированных массивов в один
  29. {
  30. for (int i = 0; i < N; i++)
  31. {
  32. startValues.AddRange(parallelData[i]);
  33. }
  34. }
Однако подобный код не работает, вылетает AggregateException. StackOverFlow советует добавить следующий код, и эксепшн действительно прекращает вылетать:
Листинг программы
  1. try
  2. {
  3. Task.WaitAll(taskList.ToArray());
  4. }
  5. catch (AggregateException)
  6. {
  7. }
Однако, данные не генерируются. Писать напрямую в генерируемый массив пробовал, но подобный код вызывает гонку, и необходимое число элементов не набирается. Просьба знатокам помочь разобраться.

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

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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

6   голосов , оценка 3.667 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы