Поток “Исключения ASP.NET прерывался” метод причин для выхода

В коде ниже, иногда someFunctionCall() генерирует исключение:

Поток прерывался.

Каким образом код в блоке кода B никогда не работает? ASP.NET начинает новую дискуссию для каждого вызова метода? Я был удивлен видеть, что, когда это исключение происходит, код в Блоке B никогда не работает, возвраты метода, и мое приложение продолжает бежать. Кто-то может объяснить это?

public void method()
{
     // CODE BLOCK A
     //...    

     try 
     {
         someFunctionCall(); // this call is generating thread abort exception
     }
     catch(Exception ex)
     {
         // log exception message
     }

    // CODE BLOCK B
    // ...    
}
21
задан Dale K 13 October 2019 в 22:15
поделиться

2 ответа

Это исключение ThreadAbortException ; это специальное исключение, которое автоматически повторно генерируется в конце каждого блока catch, если вы не вызываете Thread.ResetAbort () .

методы ASP .Net, такие как Response.End или Response.Redirect (если вы не передаете false ) генерирует это исключение, чтобы завершить обработку текущей страницы; ваш someFunctionCall () , вероятно, вызывает один из этих методов.

ASP .Net сам обрабатывает это исключение и вызывает ResetAbort для продолжения обработки.

34
ответ дан 29 November 2019 в 21:06
поделиться

Попробуйте так :

Это мой метод расширения :

 public static void WriteJSONObject(this HttpResponse response, object content) {
            response.ContentType = "application/json";
            response.Write(new JavaScriptSerializer().Serialize(content));
            response.End();

 }

И логика :

public void RegisterUser() {
    try {
        Response.WriteJSONObject(new { Result = "See hello" });
    } 
    catch (Exception err) {
        if (err.Message != "Thread was being aborted.")
            Response.WriteJSONObject(new { Result = err.Message });
        else {
            Response.End();
        }
    }
}
-2
ответ дан 29 November 2019 в 21:06
поделиться