.NET 4.x Массивы задач - C#
Формулировка задачи:
В общем, необходимо распараллелить генерацию и обработку массива данных. Почитал про задачи, потоки, TPL, вроде бы проникся, начал писать непосредственно код, и столкнулся с проблемами (код привожу обобщенный).
Однако подобный код не работает, вылетает AggregateException. StackOverFlow советует добавить следующий код, и эксепшн действительно прекращает вылетать:
Однако, данные не генерируются. Писать напрямую в генерируемый массив пробовал, но подобный код вызывает гонку, и необходимое число элементов не набирается. Просьба знатокам помочь разобраться.
Листинг программы
- 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]);
- }
- }
Листинг программы
- try
- {
- Task.WaitAll(taskList.ToArray());
- }
- catch (AggregateException)
- {
- }
Решение задачи: «.NET 4.x Массивы задач»
textual
Листинг программы
- int x = i;
- taskList.Add(Task.Factory.StartNew(() => GenerateData(x)));
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д