程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> Asp.Net2.0中實現多任務異步頁的一點提示

Asp.Net2.0中實現多任務異步頁的一點提示

編輯:.NET實例教程
     如果想學習ASP.Net2.0的異步頁技術,那麼一定要仔細閱讀http://www.microsoft.com/china/MSDN/library/default.mspx?mfr=true,並且下載它的源代碼仔細揣摩。全文共介紹了3種實現異步頁的編程模型,且功能一種比一種強大。多余的我就不多說了,直接看最後一種模型:使用PageAsyncTask類、RegisterAsyncTask方法、ExecuteRegisteredAsyncTasks方法和TimeoutAsyncOperation方法注冊並執行異步任務,並針對長時間無響應的情況調用超時處理方法。原文所提供源碼的AsyncPageTask.ASPx.cs文件詳細示例了使用這個模型實現異步頁的方法。
   這個模型最大的好處在於可以在一次頁面請求中處理多個異步任務,並且還可以用超時處理來避免在執行異步操作時出現的無響應情況。原作者僅僅在Page_Load中注冊了一個異步任務,那麼我們仿照他的做法,再注冊一個異步任務,如下所示:
  
  
  
  <%@ Page Async="true" AsyncTimeout="5" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="AsyncPageTask.ASPx.cs" Inherits="AsyncPageTask" Title="Untitled Page" %>
  
  
  
  protected void Page_Load(object sender, EventArgs e)
   {
   if (!IsPostBack)
   {
   PageAsyncTask task = new PageAsyncTask(
   new BeginEventHandler(BeginAsyncOperation),
   new EndEventHandler(EndAsyncOperation),
   new EndEventHandler(TimeoutAsyncOperation),
   null
   );
  
   PageAsyncTask task1 = new PageAsyncTask(
   new BeginEventHandler(BeginAsyncOperation1),
   new EndEventHandler(EndAsyncOperation1),
   new EndEventHandler(TimeoutAsyncOperation1),
   null
   );
  
   RegisterAsyncTask(task);
   RegisterAsyncTask(task1);
   }
   }
   如果在頁面屬性AsyncTimeout的規定時間內得到異步任務返回的結果,那麼頁面將按照我們預期的顯示。但是如果在執行第一個任務時遇到了小麻煩,耽誤了時間會怎麼樣呢?有兩種可能:一是,第一個任務的結果最終返回並顯示出來,而第二個任務剛一啟動就被判定為超時,從而執行了它的TimeoutAsyncOperation方法;二是,第一個任務沒有等到返回結果就已被判超時,因此第二個任務也一定被判超時了。以上情況是由於兩個異步任務分享了AsyncTimeout規定的時間,只要前面那個任務在執行時耽誤了時間,必然影響到後面那個任務的運行。那麼能不能讓兩個異步任務獨享AsyncTimeout規定的時間呢,這就要在ExecuteRegisteredAsyncTasks方法上找出路了。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved