Подтвердить что ты не робот

Почему я получаю сообщение "Поток прерывается" в ASP.NET?

Я не уверен, почему это происходит, и я никогда не отменяю потоки явно, так что это немного удивительно. Но я регистрирую исключения и вижу:

System.Threading.ThreadAbortException - Поток был прерван.

Похоже, это происходит при вызове System.Threading.WaitHandle.WaitOne. Я не уверен, насколько далеко заходит это исключение. Я не думаю, что мои потоки когда-либо заканчиваются, потому что я ловлю журнал и глотаю ошибку.

Почему я получаю эти ошибки? Возможно, это когда я принудительно завершаю работу моего сервера или прошу его перезагрузить? Если это не так, что может быть причиной их?

4b9b3361

Ответ 1

Нет, ThreadAbortException вызывается простым Response.Redirect

Ответ 2

Если вы создаете потоки в Application_Start, они все равно будут выполняться в пуле приложений AppDomain.

Если приложение какое-то время простаивает (это означает, что запросы не поступают) или выполняются некоторые другие условия, ASP.NET будет перерабатывать весь AppDomain.

Когда это произойдет, все потоки, которые вы начали с этого AppDomain, в том числе из Application_Start, будут прерваны.

Больше всего на пулах приложений и переработке в этом вопросе: Что такое утилизация Appdomain

Если вы пытаетесь запустить долговременный процесс в IIS/ASP.NET, короткий ответ обычно "Do not". Для чего предназначены службы Windows.

Ответ 3

ASP.NET порождает и убивает рабочие процессы все время по мере необходимости. Ваш поток может просто закрываться ASP.NET.

Старый ответ:

Известная проблема: PRB: ThreadAbortException возникает, если вы используете Response.End, Response.Redirect или Server.Transfer

Response.Redirect ("bla.aspx", false);

или

try
{
    Response.Redirect("bla.aspx");
}
catch (ThreadAbortException ex)
{
}

Ответ 4

Для веб-службы, размещенной в ASP.NET, свойство конфигурации - это исполнениеTimeout:

<configuration> <system.web>

<httpRuntime executionTimeout="360" />

</system.web>

</configuration>

Установите это, и исключение прерывания потока исчезнет:)

Ответ 5

Эта проблема возникает в методах Response.Redirect и Server.Transfer, потому что оба метода вызывают Response.End внутри.

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

Для Server.Transfer используйте вместо этого метод Server.Execute.

Посетите эту ссылку для загрузки примера.

Ответ 6

Эта ошибка может быть вызвана попыткой завершить ответ более одного раза. Как уже упоминалось в других ответах, существуют различные методы, которые завершают ответ (например, Response.End или Response.Redirect). Если вы позвоните более одного раза подряд, вы получите эту ошибку.

Я столкнулся с этой ошибкой, когда пытался использовать Response.End после использования Response.TransmitFile который, кажется, завершает ответ тоже.

Ответ 7

Я получил эту ошибку, когда сделал Response.Redirect после успешного входа пользователя.

Я исправил это, сделав вместо этого FormsAuthentication.RedirectFromLoginPage.

Ответ 8

Я также имею ту же ошибку, когда я пытаюсь вставить в таблицу из запроса выбора. Но когда я выбираю запрос для вставки в таблицу, размер столбца обеих таблиц не одинаков. Следовательно, я получаю эту ошибку.

вставить в tbl_user (имя пользователя, оклад) выбрать имя пользователя, оклад из tbl_user_details;

Размер столбца username в tbl_user равен varchar2 (20), а данные извлекаются из tbl_user_details - 26, следовательно, я получаю ошибку.

Это моя помощь кому-то..