Page_Load()可以异步执行吗?

15

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
}
3个回答

24

这给我带来了一个调试错误:解析属性“async”时出错:类型“AsyncTest.Page1”没有名为“async”的公共属性。 - Michael Mormon
所以我做了这个,但是 private async Task PostClaimToService() 函数与 RegisterAsyncTask(new PageAsyncTask(PostClaimToService())); 的调用不匹配... 它期望一个返回 BeginHandler 对象的函数。 - Ortund

0

-2

ASP.NET 设计没有使用任何形式的任务等待来调用此方法,因此它不能是异步的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接