您的位置:首页 > 编程语言 > ASP

asp.net 2.0中实现异步处理任务.

2008-04-27 01:56 363 查看
以下内容是在newsgroups中解决一个朋友的问题而写的demo,留下给自己做个备忘录.
----
关于PageAsyncTask在MSDN上的参考
ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.en/fxref_system.web/html/08ffac7a-2c3c-27ee-1445-5284a226be38.htm

说明:此页面中,在Page_Load方法中,同时启动4个较耗时的任务(线程),让它们并行的运行,然后等待他们都运行完毕或超时.

usingSystem;
usingSystem.Diagnostics;
usingSystem.Threading;
usingSystem.Web.Mvc;
usingSystem.Web.UI;
namespacePortal.Views.Home
{
publicpartialclassIndex:ViewPage
{
privatestring_asyncResult;
privateAsyncTaskDelegate_asyncTask;
protectedvoidPage_Load(objectsender,EventArgse)
{
Stopwatchsw=Stopwatch.StartNew();
PageAsyncTasktask1=
newPageAsyncTask(OnTaskBegin,OnTaskEnd,OnTaskTimeout,"A1",true);
PageAsyncTasktask2=
newPageAsyncTask(OnTaskBegin,OnTaskEnd,OnTaskTimeout,"B2",true);
PageAsyncTasktask3=
newPageAsyncTask(OnTaskBegin,OnTaskEnd,OnTaskTimeout,"C3",true);
PageAsyncTasktask4=
newPageAsyncTask(OnTaskBegin,OnTaskEnd,OnTaskTimeout,"D4",true);
RegisterAsyncTask(task1);
RegisterAsyncTask(task2);
RegisterAsyncTask(task3);
RegisterAsyncTask(task4);
//Bydefault,anasynchronoustaskwilltimeoutifithasnotcompleted
//within45seconds.
AsyncTimeout=TimeSpan.FromSeconds(60);
ExecuteRegisteredAsyncTasks();
sw.Stop();
//now,wecangetthetaskresulthere.
Response.Write(_asyncResult);
Response.Write(sw.Elapsed.TotalSeconds);
}
privateIAsyncResultOnTaskBegin(objectsender,
EventArgse,
AsyncCallbackcallback,
objectdata)
{
_asyncTask=delegate(stringtext)
{
//TODO:addyourasynctaskhere.
stringresponse=
string.Format("AsyncTask{0}startedat:{1}.",text,DateTime.Now);
Thread.Sleep(TimeSpan.FromSeconds(10));
response+=
string.Format("AsyncTask{0}endedat:{1}.\n",text,DateTime.Now);
returnresponse;
};
IAsyncResultresult=_asyncTask.BeginInvoke((string)data,callback,data);
returnresult;
}
privatevoidOnTaskEnd(IAsyncResultar)
{
_asyncResult+=_asyncTask.EndInvoke(ar);
}
privatevoidOnTaskTimeout(IAsyncResultar)
{
_asyncResult=string.Format("AsyncTask{0}istimeout.",ar.AsyncState);
}
#regionNestedtype:AsyncTaskDelegate
protecteddelegatestringAsyncTaskDelegate(stringtext);
#endregion
}
}

.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}

.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}

reference:http://msdn.microsoft.com/en-us/library/system.web.ui.pageasynctask(zh-cn).aspx
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐