什么时候调用Page.RegisterAsyncTask?

时间:2015-07-22 15:26:01

标签: c# asp.net async-await viewstate .net-4.5.2

我遇到了与使用RegisterAsyncTask,ViewState和复选框在ASP.NET页面上注册的异步代码相关的令人困惑的行为,我需要确切知道这些异步任务在保存ViewState时的运行时间。

我在ASP中有一些复选框:PlaceHolder控件。我正在阅读记录并填充复选框,然后我将PlaceHolder显示为可见。

如果所有这些都是同步的 - 可能在Page_Load中 - 一切都很好。

如果将其注册为异步任务,则会发生以下情况:

  1. 复选框已填充。
  2. 占位符可见。
  3. 在回发时,复选框不能是UNCHECKED。也就是说,如果最初检查它们,即使用户取消选中它们,它们也会保留其检查状态。好像复选框会恢复为初始值。如果在客户端上选中了复选框,那就是它!取消选中不会。
  4. 这似乎不是文本框的问题。我还没有尝试过其他小部件。

    我可以纠正'在注册异步任务之前,将PlaceHolder设置为可见此问题。我认为这与我关于网格可见性的其他问题类似:

    asp:DataGrid visibility with async?

    当我尝试从异步方法中提取所有可见性规则时,它变得非常困难并导致代码混乱。

    我从ASP.NET页面生命周期中看到,在OnPreRender之前的某个时间保存。我也认为 RegisterAsyncTask&#d;代码大约在同一时间运行。这发生了什么顺序?如果在我的代码运行之前保存了ViewState,那我就沉没了!

    编辑:我发现了一些更多的细节,但它仍然令人困惑: 在此页面的中间位置:http://www.asp.net/web-forms/overview/performance-and-caching/using-asynchronous-methods-in-aspnet-45它说

    "与RegisterAsyncTask连接的方法将在PreRender之后立即运行。"

    此页面:https://msdn.microsoft.com/en-us/library/ms178472(v=vs.85).aspx详细介绍了PreRender和SaveStateComplete事件,但未提及RegisterAsyncTask。我需要进行试验,看看它们之间是否有鞋角。

1 个答案:

答案 0 :(得分:1)

sparse matrix可让您在启动任务时获得更多控制权。

  

自动调用ExecuteRegisteredAsyncTasks方法   在任何注册的异步任务中指向页面处理,   如果它们存在,则为非异步页面调用。 这是自动的   呼叫ExecuteRegisteredAsyncTasks发生在...之前   ExecuteRegisteredAsyncTasks活动。

来自PreRenderComplete文档:

  

这是在保存页面视图状态之前引发的最后一个事件。

相关问题