Page_Load() 可以异步吗

问题描述 投票:0回答:3

Page_Load()
方法可以是
async
吗?我问就好像我已经这样声明了

protected void Page_Load()

一切都按其应有的方式加载。如果我这样声明的话

protected async void Page_Load()

Page_Load()
断点未命中,
catch()
块也未命中。

现在我尝试将我的

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

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

我的代码是这样的。

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
}
c# asp.net asynchronous webforms
3个回答
24
投票

Scott Hanselman 拥有将异步与 ASP.NET 生命周期事件结合使用的魔力

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


0
投票

这个问题很老了,但我们不断到达这里。

这是 Microsoft 处理 Async Page_Load() 的文档:在 ASP.NET 4.5 中使用异步方法

https://learn.microsoft.com/en-us/aspnet/web-forms/overview/performance-and-caching/using-asynchronous-methods-in-aspnet-45


-2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.