Ваше исключение может свидетельствовать о других вещах.Какое значение на самом деле null
?Вы не говорите.
Я вижу некоторые проблемы с этим кодом.
Вы не можете зависеть от последовательности цикла, но у вас есть temp +=
(последовательное добавление строки ксуществующей строки, затем присваивая строку обратно исходной переменной) во всем параллельном коде.Temp устанавливается вне параллельного цикла.Это очень опасно.Неправильное использование общего состояния / данных / ресурсов является одной из наиболее распространенных ошибок в многопоточном коде.
temp может иметь значения, добавленные не по порядку.Несколько вещей будут добавлены к temp одновременно, и, таким образом, temp может в конечном итоге пропустить информацию, потому что temp перезаписывается из нескольких потоков.
Откуда берется _Filings
?Что это?
Возможно, вы захотите создать новый temp
string
внутри цикла и добавить туда все, добавив окончательный temp
к ConcurrentBag
(который вы создаете вне цикла)в каждой итерации.После этого вне параллельного цикла вы можете перебрать ConcurrentBag
и получить окончательную строку в безопасной среде.
Обновление на основе комментария Комментарий:
System.Web.HttpContext.Current.Server.MapPath используется, а HttpContext.Current является нулевым в цикле многопоточности.
Причина в том, что вы сейчас находитесь в другом потокетекущий HttpContext, поэтому он не может ответить на любые вопросы для вас.Вам придется либо передать в контексте параллельную задачу, либо отдельные значения из нее.Я не знаю, насколько это опасно в параллельной среде.
HttpContext myContext = HttpContext.Current;
В вашем параллельном цикле используйте myContext
вместо HttpContext.Current
.
Я не рекомендую это какЗнание HttpContext
в областях (таких как уровень данных) устанавливает ненужную связь и делает приложение очень сложным в обслуживании.Чтобы порекомендовать лучшее решение, потребуется гораздо больше разбирать ваше приложение, чем это возможно при публикации на форуме.Однако на данный момент это должно заставить вас двигаться снова.