Ошибка прерывания потока - PullRequest
2 голосов
/ 30 апреля 2009

У нас есть приложение, которое может создавать электронные книги. Это приложение имеет модуль экспорта, который создает файл AIR, но это может занять некоторое время (в некоторых книгах по 2500 страниц). Если мы экспортируем, мы получаем следующую ошибку:

Thread was being aborted. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Threading.ThreadAbortException: Thread was being aborted.

Source Error: 
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. 

Stack Trace: 

[ThreadAbortException: Thread was being aborted.]
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +501
   System.Web.ApplicationStepManager.ResumeSteps(Exception error) +564
   System.Web.HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) +141
   System.Web.HttpRuntime.ProcessRequestInternal(HttpWorkerRequest wr) +436

Я изменил время выполнения во время выполнения на 3600 секунд, но оно продолжает падать около 3 минут. так что это связано со временем ... каждый раз, когда мы приближаемся к 3 минутам, это терпит крах, я надеюсь, что кто-то может помочь мне.

Ответы [ 3 ]

4 голосов
/ 05 мая 2009

Я думаю, что Павел прав насчет причины исключения. И IIS, и ASP.NET имеют параметры, ограничивающие максимальное количество времени, которое может занять запрос. Для ASP.NET он находится в файле Machine.Config (ищите элемент httpRuntime, атрибут executeTimeout). На моей машине для разработки установлено значение 90 секунд.

Однако я бы не советовал вам менять эту настройку, поскольку она существует, чтобы убедиться, что ваше приложение не зависает при неверном запросе.

Долгосрочные задачи должны использовать асинхронное выполнение. При асинхронном выполнении фактическая работа обрабатывается в отдельном потоке. Это освобождает поток, обрабатывающий запрос, для обработки других запросов, что хорошо для общей производительности вашего приложения.

Есть несколько хороших статей на эту тему. Например: http://msdn.microsoft.com/en-us/magazine/cc163725.aspx

0 голосов
/ 30 апреля 2009

В IIS предусмотрена защита потока «на выходе», которая убивает поток / домен приложения, если он выполняется слишком долго.

0 голосов
/ 30 апреля 2009

Довольно часто эта ошибка возникает из-за исключения OutOfMemory. Есть ли InnerException?

...