首页 > 解决方案 > asp.net中只有一个线程处理一页吗?

问题描述

我正在设置一个 asp.net 网络服务器。

在 page_load 中,我使用 async/await。

我想知道页面线程是否可以在操作执行异步/等待时执行其他操作。

例如,一个页面线程可以处理另一个页面吗?

 protected void Page_Load(object sender, EventArgs e)
 {  
      //...
      var taskResult = LoadData(sqlConn, sqlTran, 30)

      if(taskResult.Result == true)
      //...
 }

 public static async Task<Boolean> LoadData(SqlConnection sqlConn, SqlTransaction sqlTran, Int64 ID)
 {
     //...
     using (var cmd = new SqlCommand("Proc_LoadData", sqlConn, sqlTran))
     {
         //..
         using (var sqlData = await cmd.ExecuteReaderAsync().ConfigureAwait(false))
         {
             //..
         }
     }
     //..
 }

标签: c#asp.net

解决方案


在你的代码中,不,因为你的Page_Load方法不是异步的,所以它在等待LoadData它继续之前完成。看起来您正在使用 Web 表单,所以我不确定这是否会起作用(自从我使用 Web 表单以来已经有很多年了),但是您需要使该方法异步,然后再await使用另一种方法。

protected async void Page_Load(object sender, EventArgs e)
{  
  //...
  bool taskResult = LoadData(sqlConn, sqlTran, 30)

  if(taskResult == true)
  //...
}

但是,如果那里抛出异常,你永远不会知道,因为当你有一个async void方法时,没有什么可以处理异常。看看 Stephen Cleary 对Async Void、ASP.Net 和 Count of Outstanding Operations的回答,他是 async/await 的专家。


推荐阅读