何时使用PageAsyncTask(异步asp.net页面)的示例

时间:2010-03-07 23:24:44

标签: asp.net

根据我对阅读有关ASP.NET异步页面的理解,该方法在异步任务开始时始终执行预呈现和预呈现完成事件之间执行。因为页面的控件'事件在页面的加载和预渲染事件之间运行,所以无论开始任务处理程序(下面的BeginAsync处理程序)产生什么,它都不能用在控件的事件中?例如,如果处理程序从数据库获取数据,则数据不能用于任何控件的回发事件?在预渲染之后你会将数据绑定到数据控件吗?

PageAsyncTask pat = new PageAsyncTask(BeginAsync, EndAsync, null, null, true);
this.RegisterAsyncTask(pat);

1 个答案:

答案 0 :(得分:7)

完全无视Guffa的回答,还没有足够的声誉来投票给他,但这完全是误导和可怕的错误。 Tony_Henrich的链接非常好,这是另一个同样有用的方法:http://msdn.microsoft.com/en-us/magazine/cc163725.aspx

所有 DataSource控件都会在 Page_PreRender之后自动数据绑定(如果之前尚未手动) - 所以您可以绑定所有PageAsyncTask事件处理程序中的数据,甚至可以绑定Page_PreRenderComplete中的数据(仅在每PageAsyncTask个完成或超时后启动)。

PageAsyncTask 最适合处理数据库,Web服务,文件I / O以及CPU等待数据处理的所有其他操作 - 但不是用于CPU密集型或长时间运行的计算(当CPU忙时)。

说了这么多,如果两个或多个PageAsyncTask并行运行,页面的处理速度会更快 ,但,即使只有一个{{ 1}},请求线程被发送回池(限制供应),而I / O线程处理该操作,从而释放IIS以接收更多传入请求,直到任务完成(然后它从池中获取请求线程) ,不一定是同一个,并继续页面处理)。