2010-03-07 2 views
3

Из моего понимания, прочитав об асинхронных страницах ASP.NET, метод, который выполняется при запуске асинхронной задачи ВСЕГДА ИСПОЛНИТЕ между предварительным рендерингом и предварительным рендерингом. Так что, поскольку события элементов управления страницы выполняются между загрузкой страницы и событиями предварительного прослушивания, верно ли, что независимо от того, какой начальный обработчик задачи (обработчик для BeginAsync ниже) создает, он не может использоваться в событиях элементов управления? Так, например, если обработчик получает данные из базы данных, данные не могут использоваться ни в одном из событий обратной передачи элементов управления? Не могли бы вы привязать данные к управлению данными после prerender?Примеры использования страниц PageAsyncTask (страницы Asynchronous asp.net)

PageAsyncTask pat = new PageAsyncTask(BeginAsync, EndAsync, null, null, true); 
this.RegisterAsyncTask(pat); 

ответ

7

Полностью игнорировать ответ Guffa, в еще не получили достаточно репутацию еще вниз голосовать его, но это совершенно вводит в заблуждение и ужасно неправильно. Ссылка на Tony_Henrich очень хорошо, а вот еще один равной полезности: http://msdn.microsoft.com/en-us/magazine/cc163725.aspx

ВсеDataSource управления автоматически DataBound послеPage_PreRender (если уже не до того вручную, что) - так да вы можете связать данные во всех обработчиках событий PageAsyncTask или даже в Page_PreRenderComplete (который начинается только после завершения каждого PageAsyncTask или тайм-аутов).

PageAsyncTaskявляется лучше всего использовать при работе с базами данных, веб-сервисов, файл ввода/вывода и все другие операции, на которых ожидает процессор для данных, чтобы обработать его - но не для ресурсоемкие или долго работающих расчетов (при CPU занят).

Сказав все это, страница будет обрабатывать быстрее только, если два или более PageAsyncTask выполняются параллельно - но, даже только один PageAsyncTask, запрос поток направляется обратно в бассейн (ограниченное предложение) в то время как поток ввода-вывода обрабатывает эту операцию, тем самым освобождая IIS для приема большего количества входящих запросов, пока задача не завершится (тогда она получает поток запроса из пула, не обязательно тот же самый, и продолжает обработку страницы).

+1

@ Guffa Guffa, вы просто неверны в ** всех ** учетных записях и просто сбиваете с толку людей: страница ** делает ** дожидаться 'PageAsyncTask (если они не тайм-аут), а 'Page_PreRenderComplete' ** гарантирован ** для запуска только после этого. Только новые потоки и асинхронные методы, которые ** не ** зарегистрированы как «PageAsyncTask», не препятствуют заполнению страницы и возврату в браузер. Страница отображается только на 'Page_Render', поэтому вы ** можете надежно ** изменять любой элемент управления до начала этого события. Для элементов управления жизненным циклом страницы и элементов управления, связанных с данными, см .: http://msdn.microsoft.com/en-us/library/ms178472.aspx –

+0

Ваша ссылка также мертва, она ведет меня к тому же месту, которое делает Тони. – MadSkunk

+0

@MadSkunk это текст под названием Wicked Code: Масштабируемые приложения с асинхронным программированием в ASP.NET от Dino Esposito, и вы можете загрузить весь журнал MSDN March 2007 здесь: http://download.microsoft.com/download/3/ А/7/3A7FA450-1F33-41F7-9E6D-3AA95B5A6AEA/MSDNMagazineMarch2007en-us.chm –

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