Я недостаточно знаком с внутренностями записи сеанса, но я предполагаю, что у него есть некоторые сложности, поскольку он основан на преобразовании файлов cookie сеанса браузера в идентификацию сервера. Кроме того, ThreadAbortExceptions имеет особые соображения во время выполнения, которые могут играть здесь, я не уверен.
В любом случае, Response.Redirect()
имеет перегрузку, которая принимает логический параметр, который позволяет вам указать, хотите ли вы завершить поток или нет.
Response.Redirect(string url, bool endResponse);
Если вы вызовете его с endResponse, установленным в «false», он будет аккуратно закончен, вместо внутреннего * вызова 900. Однако это означает, что он также выполнит любой код, оставленный в жизненном цикле страницы перед завершением.
Хороший компромисс - позвонить Response.Redirect(url, false)
, а затем Application.CompleteRequest()
. Это позволит вашему перенаправлению произойти, но также изящно закроет текущий контекст выполнения с минимальной дополнительной обработкой жизненного цикла.