Почему пропадают значения при паралельной обработке масива в C#?
Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті
public static async void Beg () { string begin = @" <fellow_update_facility>"; string end = @"</fellow_update_facility>"; int CCountOfUserd = 10000; int length1 = 0; List<string> zxc = new List<string>(); IEnumerable<int> items = Enumerable.Range(20000, CCountOfUserd); items.AsParallel().ForAll(async item => { Interlocked.Increment(ref length1); //string ddd = await Task.Run(() => GetRecord(item)); zxc.Add(await Task.Run(() => GetRecord(item))); }); if (zxc.Count == CCountOfUserd) { System.IO.File.WriteAllText(@"D:\FDD Update File 1 20150304.xml", begin + string.Join(",", zxc.ToArray()) + end); } }Так вот на выходе zxc.Count == CCountOfUserd количество записей не совпадает с количеством обработанных элементов массива. Количество обработанных элементов массива в length1 смотрю . У меня 8 потоковый проц и прирост больше чем в 10 раз, но надо что б все было правильно.
Метод GetRecord — просто возвращает обработанную строку.
Подскажите что делать.
6 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів