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个较耗时的任务(线程),让它们并行的运行,然后等待他们都运行完毕或超时.
.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
----
关于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:
相关文章推荐
- asp.net 2.0页面性能的考虑--异步页面处理模型
- 【C#】对异步请求处理程序IHttpAsyncHandler的理解和分享一个易用性封装 【手记】走近科学之为什么明明实现了IEnumerable<T>的类型却不能调用LINQ扩展方法 【手记】手机网页弹出层后屏蔽底层的滑动响应 【手记】ASP.NET提示“未能创建类型”处理 【Web】一个非常简单的移动web消息框 【手记】解决EXCEL跑SQL遇“查询无法运行或数据库表无法打开...”
- asp.net 2.0页面性能的考虑--异步页面处理模型
- asp.net 2.0页面性能的考虑--异步页面处理模型
- 在ASP.NET Web API项目中使用Hangfire实现后台任务处理
- ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(九) 之 用 Redis 实现用户在线离线状态消息处理(一)
- ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(八) 之 用 Redis 实现用户在线离线状态消息处理
- asp.net 2.0页面性能的考虑--异步页面处理模型
- 如何在asp.net中使用多线程及队列,异步处理一个耗时的任务(原创)
- UrlRewritingNet 完美实现 ASP.NET 2.0 中的URL重写
- 转:ASP.NET 2.0利用Httphandler实现URL重写(伪URL及伪静态)
- ASP.NET Mvc 2.0 - 2. 异步Controller执行流程时序图
- ASP.NET 2.0中GridView无限层复杂表头的实现
- ASP.NET 2.0网站换肤实现过程
- ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(三) 之 实现单聊,群聊,发送图片,文件。
- Asp.net异步文件读写并发处理总结
- ASP.NET 2.0中实现模板中的数据绑定
- ASP.NET 2.0中轻松实现网站换肤
- ASP.NET MVC 文件异步上传问题处理
- 在ASP.NET 2.0中实现本地化