Допустим, у меня есть сценарий, в котором я создал цикличную логику и в цикле я объединяю результаты во внешний список.Я знаю, что в этом сценарии результаты Parallel.ForEach () должны быть помещены в потокобезопасную коллекцию, такую как ConcurrentBag вместо List.Верна ли эта практика для результатов, возвращаемых асинхронными методами?Или безопасно объединить результаты из цикла асинхронных методов в стандартный список?
ОБНОВЛЕНИЕ
Интересный тест: я выполнил тест, в котором я просто добавил 1M Tupleв ConcurrentBag и тот же тест для списка.Тест List завершился за 480 мс, тогда как тест ConcurrentBag завершился в 777. Таким образом, список почти на 40% быстрее, чем ConcurrentBag с 1M вставками.Я попробовал тот же самый тест с 250K строками и тест ConcurrentBag, завершенный в 140, тогда как тест List закончился в 182. Так что ConcurrentBag почти на 25% быстрее для вставок 250K.Список, скорее всего, был бы быстрее, если бы сценарий вставки мог быть выполнен как AddRange (), но в противном случае ConcurrentBag быстрее, если вставки должны выполняться постепенно для результирующего набора <250 КБ.Это был ваш опыт?Любая идея, почему ConcurrentBag относительно быстрее, чем List для меньшего набора результатов, но относительно медленнее для большего набора результатов? </p>