【问题标题】:Can Page_Load() Be AsyncPage_Load() 可以异步吗
【发布时间】:2016-06-24 07:29:48
【问题描述】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 这给我一个调试错误:解析属性“异步”时出错:类型“AsyncTest.Page1”没有名为“异步”的公共属性
    • 所以我这样做了,但是 private async Task PostClaimToService() 函数与 RegisterAsyncTask(new PageAsyncTask(PostClaimToService())); 调用不匹配...它需要一个返回 BeginHandler 对象的函数
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2018-09-07
      • 2014-09-09
      • 2018-12-16
      • 2018-11-05
      • 2016-03-16
      • 2011-12-30
      • 2016-02-20
      相关资源
      最近更新 更多