Page_Load()可以异步

时间:2016-03-09 18:34:22

标签: c# asp.net asynchronous webforms

Page_Load()方法可以async吗?我问我好像已经宣布了这样的

protected void Page_Load()

一切都按照应有的方式加载。如果我将其宣布为

protected async void Page_Load()

Page_Load()断点没有被击中,catch()块也没有被击中。

现在我尝试将Page_Load()方法设置为async,以便在完全呈现页面之前执行3个不同的存储过程。如果我没有将Page_Load()方法作为async,我会收到此编译错误:

  

await运算符只能与async方法一起使用。

我的代码就是这样。

private DataSet ds1 = new DataSet();
private DataSet ds2 = new DataSet();
private DataSet ds3 = new DataSet();

protected async void Page_Load(object sender, EventArgs e)
{
 if (!IsPostBack)
 {
    var task1 = GetStoreInfo();
    var task2 = GetSalespersonInfo();
    var task3 = GetManagerInfo();
    await System.Threading.Tasks.Task.WhenAll(task1, task2, task3);
    PopulateAll();
 }

}

async System.Threading.Tasks.Task<DataSet> GetStoreInfo()
{
  ds1 = RunStoredProcedureToReturnThisData();
  return ds1;
}

async System.Threading.Tasks.Task<DataSet> GetSalespersonInfo()
{
  ds2 = RunStoredProcedureToReturnThisData();
  return ds2;
}

async System.Threading.Tasks.Task<DataSet> GetManagerInfo()
{
  ds3 = RunStoredProcedureToReturnThisData();
  return ds3;
}

protected void PopulateAll()
{
  //Bind the different returned datasets
}

2 个答案:

答案 0 :(得分:2)

Scott Hanselman在此处使用与ASP.NET生命周期事件异步的魔力

http://www.hanselman.com/blog/TheMagicOfUsingAsynchronousMethodsInASPNET45PlusAnImportantGotcha.aspx

答案 1 :(得分:0)

没有ASP.NET设计不使用任何形式的Task Await调用此方法,因此它不能是Asnyc