В настоящее время я работаю в .net С# 4.0 и столкнулся с проблемой, связанной с написанным мной кодом, который вызывает у меня некоторые головные боли.
Я использую класс System.Threading.Tasks.TaskFactory в сочетании с System.Threading.Tasks.TaskScheduler для запуска нового потока в моем консольном приложении, где функция потока заключается в проверке того, добавлен ли элемент в очередь. Когда элемент добавляется в очередь, он обрабатывает его.
Таким образом, очередь содержит электронные письма для отправки, и как только электронное письмо добавляется в очередь, электронное письмо отправляется через несколько клиентов. Отправка каждому производится параллельно.
У меня есть эта прерывистая проблема, когда в новом потоке иногда возникает следующее исключение:
[System.Threading.ThreadAbortException] = {Невозможно оценить выражение, так как код оптимизирован или собственный фрейм находится поверх стека вызовов.}
При отладке я не могу получить дополнительную информацию, так как все свойства в стеке имеют «Невозможно оценить выражение, потому что код оптимизирован или собственный фрейм находится поверх стека вызовов».
В поисках решения в Интернете я обнаружил, что это проблема, возникающая при выполнении response.redirect, но я не делаю этого в своем коде. Если я попытаюсь выполнить отладку, не будет согласованности в отношении того, где возникает эта ошибка. Ниже приведен код, который я использую для создания фабрики и запуска нового потока:
this.taskFactory = new TaskFactory(TaskScheduler.Current);
this.taskFactory.StartNew(this.DequeueMessage, state, TaskCreationOptions.LongRunning);
Есть ли у кого-нибудь какие-либо указания относительно того, почему я могу получить эту ошибку, и какие-либо советы относительно того, как ее можно исправить?