.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)));
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д