2012-01-01 2 views
1

У меня есть такой сценарий:Команды Asp.net все еще работают? но почему?

enter image description here

Когда a.aspx нагрузки - я нажимаю button1.

вот вопрос:

После нажатия кнопки Button1 - Я Закрыть браузер.

что теперь происходит с long work?

Я предполагаю, что это продолжается ...

Но вопрос почему?

Неужели длинная работа знает, что его основная преподобная нить была прекращена?

на самом деле также его отец нить была прекращена также (b.aspx резьба)

разве есть любые отношения между длинной FUNC к b.aspx/a.aspx?

ответ

2

Когда вы открываете WebRequest для доступа к b.aspx, вы фактически создаете HTTP GET для этой страницы. B.aspx ничего не знает о потоках a.aspx. Однако, когда вы закрываете браузер, HTTP-канал из вашего браузера на веб-сервер (с помощью обработчика нажатия кнопки) прекращается. Тем не менее веб-сервер не замечает этого, и поток, отвечающий за событие click, продолжает ждать завершения выполнения Web-запроса b.aspx и в конечном итоге ожидает, что ваш длинный b.aspx будет отображаться до тех пор, пока не истечет время ожидания сервера.

2

Сервер останавливается только после завершения функции button1_Click, даже если вы закрываете. Нить не прекратилась при закрытии браузера, сервер только знает, что вы сделали запрос на запуск функции button1_Click, он не знает, работает ли браузер или нет.

1

Насколько я знаю, между нажатием кнопки и вашей страницей b.aspx нет подразумеваемых отношений. Чтобы отменить длинный поток, вам понадобится какой-то идентификатор, который будет немедленно возвращен вашему методу щелчка. Вам также необходимо будет обнаружить закрытие браузера (это невозможно во всех браузерах в последний раз, когда я пробовал его около 5 лет назад). Затем вам нужно как-то отменить этот «запрос», используя ранее возвращенный идентификатор.

Мне кажется, что b.aspx действительно должен быть веб-сервисом, но вам все равно придется выяснить, как отменить запрос «in-progess».

Существует не запеченный способ сделать это. Это звучит как интересный «день разработчика», хотя :)

1

Когда вы закрываете браузер или переходите на новую страницу, соединение TCP закрывается, но это само по себе не приводит к прекращению связанного потока ,

Вы можете посмотреть, сохраняется ли соединение TCP до начала длительного действия, проверив this.Response.IsClientConnected. Вы также можете разбить длительную деятельность на несколько небольших кусков и проверить IsClientConnected между ними.

Смежные вопросы