异步任务处理类:PageAsyncTask
PageAsyncTask类包含对注册到页面的异步任务的管理,能够通过编程的方式在页面呈现前执行多个任务,还可以指定这些任务的运行模式是并行还是串行。任务的运行期在页面的PreRender事件和PreRenderComplete事件之间。
PageAsyncTask类的方法多是类的通用方法。其只提供了异步任务的一些属性,如任务对象的状态和异步对象的运行模式等。我们可以通过这些属性,设计异步任务处理功能。
语法定义:
public sealed class PageAsyncTask
属性详解:
PageAsyncTask类的属性用来指定运行的一些方法。
BeginHandler: 获取当异步任务开始时要调用的方法。 返回结果:System.Web.BeginEventHandler 委托,表示当异步任务开始时要调用的方法。
EndHandler : 获取当任务在超时期内成功完成时要调用的方法。返回结果: System.Web.EndEventHandler 委托,表示当任务在超时期内成功完成时要调用的方法。
ExecuteInParallel: 获取一个值,该值指示任务能否与其他任务并行处理。 返回结果: 如果任务应当与其他任务并行处理,则为 true;否则为 false。
State:获取表示任务状态的对象。 返回结果: System.Object,表示任务状态。
TimeoutHandler:获取当任务未在超时期内成功完成时要调用的方法。返回结果: System.Web.EndEventHandler 委托,表示当任务未在超时期内成功完成时要调用的方法。
典型应用:使用PageAysncTask异步执行任务
学习如何实现页面异步任务。虽然任务很简单,只是输出一行语句,但对于如何调用异步任务的步骤却讲述得很清晰
1、新建一个网站,命名为“PageAsyncTaskSample”.
2、打开Default.aspx页面,在指令“@Page”中设置运行异步执行得属性,同时设置异步超时的时间为10秒,具体代码如下:
<%@ Page Language="C#" AutoEventWireup="true" Async="true"AsyncTimeout=10 CodeFile="Default.aspx.cs" Inherits="_Default" %>
3、在Page_Load事件中,注册一个新任务,代码如下。可以看到在执行任务的前后都显示语句,可通过次判断任务的执行方式。
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("没有任务前");
PageAsyncTask task = new PageAsyncTask(new BeginEventHandler(BeginAsync), new EndEventHandler(EndAsync),
new EndEventHandler(TimeoutAsync), null);//定义异步任务
RegisterAsyncTask(task);//注册异步任务
Response.Write("执行任务后");
}
4、任务中涉及的委托和事件的代码如下:
protected delegate void AsyncTaskDelegate();
IAsyncResult BeginAsync(object sender, EventArgs e, AsyncCallback asyncCall, object state)
{
//获取用户的特色设置,假设已经获取完毕
AsyncTaskDelegate _dlgt = new AsyncTaskDelegate(getProfile);
IAsyncResult result = _dlgt.BeginInvoke(asyncCall, state);
return result;
}
void EndAsync(IAsyncResult result)
{
Response.Write("您的特色设置任务已经完成");
}
void TimeoutAsync(IAsyncResult result)
{
Response.Write("Sorry,任务处理超时");
}
private void getProfile()
{
Response.Write ("特色设置已近获取完毕"); //考虑到篇幅问题,此处直接返回值
}
5、运行程序,测试异步任务程序的执行情况和语句显示的顺序。