日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

使用ASP.NET MVC Futures 中的異步Action_.Net教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:注意ADO.NET中容易混淆的概念
一、DataTable DataTable表示內(nèi)存中數(shù)據(jù)的一個表,它完全是在內(nèi)存中的一個獨立存在,包含了這張表的全部信息。DataTable可以是從通過連接從數(shù)據(jù)庫中讀取出來形成的一個表,一旦將內(nèi)容讀到DataTable中,此DataTable就可以跟數(shù)據(jù)源斷開而獨立存在;也可以是完

在ASP.NET MVC中使用異步是比較麻煩的,從RC1版開始ASP.NET MVC Futures中提供了幾個支持異步的類。

相關(guān)的類有:AsyncActionDescriptor、AsyncController、AsyncControllerActionInvoker、AsyncManager、AsyncResultWrapper、AsyncTimeoutAttribute、NoAsyncTimeoutAttribute。

相關(guān)接口有:IAsyncActionDescriptor、IAsyncActionInvoker、IAsyncController、IAsyncManagerContainer。

下面講解一下怎么用它們

一、使用異步Action前的準(zhǔn)備工作

1.引用Microsoft.Web.Mvc。

2.先要將要異步處理的Url交由MvcHttpAsyncHandler處理,這一步可以由AsyncRouteCollectionExtensions.MapAsyncRoute來設(shè)置規(guī)則,將原MapRoute處理的規(guī)則改為MapAsyncRoute,如:

routes.MapAsyncRoute(

"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" }
);

3.將相應(yīng)的Controller繼承于AsyncController。

public class HomeController : AsyncController { }

4.我們約定以下定義的Action都在HomeController中

二、第一種異步Action方式:Action、ActionCompleted方式

ASP.NET MVC Futures支持按名稱自動尋找異步Action的方法

其使用方法為:

public void Async1(){

//主線程

}

public ActionResult Async1Completed(){

//自動尋找與主線程 Action名稱 Completed 的Action 做為異步Action

return Content("Async1");}

三、第二種異步Action方式:BeginAction、EndAction方式

如果第一種方式你了解了的話第二種自然也不在話下,不過這種方式是與其它類的異步調(diào)用一起使用。

public delegate void AsyncEventHandler();//這里聲明了一個委托,//也可使用

WebRequest/WebResponse/SqlConnection來實現(xiàn)這個異步過程

public void Event1(){}

public IAsyncResult BeginAsync3(AsyncCallback callback, object state){

AsyncEventHandler asy = new AsyncEventHandler(Event1);

ViewData["a"]=asy;//這里在方法間傳值必須使用輔助存儲對象,第一種方法中也是一樣
return asy.BeginInvoke(callback, state);

}

public void EndAsync3(IAsyncResult result){

//轉(zhuǎn)到異步的Action中

var a = ViewData["a"] as AsyncEventHandler;

a.EndInvoke(result);

Content("完成").ExecuteResult(this.ControllerContext);
}

四、第三種異步Action方式:使用AsyncManager.RegisterTask及委托

如果感覺上面使用2個方法才能實現(xiàn)異步Action有些麻煩的話(也的確是麻煩),可以使用AsyncManager.RegisterTask來調(diào)用委托來實現(xiàn)異步調(diào)用。

public void Async2(){

this.AsyncManager.RegisterTask(c => {

//主線程,調(diào)用異步線程

c(null);

}, delegate(IAsyncResult result) {

//異步部分

Content("Async2").ExecuteResult(this.ControllerContext);

});

}

其實無論是哪種方法都感覺不太完美,我個人覺得Action/ActionCompleted的方法可能更優(yōu)美一點,適合一般使用(只是這三個比較)。只是AsyncManager.RegisterTask的方法傳值方便一點,而Begin/End方法更適合與其它異步的操作配合。

分享:解析asp.net開發(fā)與web標(biāo)準(zhǔn)的沖突問題
Visual Studio .net從2003到現(xiàn)在的2008,一路走來慢慢強(qiáng)大從以前的vs2003能自動改亂你的html代碼到現(xiàn)在在vs2008中都能直接對html代碼進(jìn)行w3c標(biāo)準(zhǔn)驗證并提示了,非常不易。 論壇中也經(jīng)常有從事.net開發(fā)的新手朋友問一些ASP.net開發(fā)過程中與Web標(biāo)準(zhǔn)之間的沖突

來源:模板無憂//所屬分類:.Net教程/更新時間:2009-04-18
相關(guān).Net教程