c# - 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))
{
//..
}
}
//..
}
解决方案
在你的代码中,不,因为你的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 的专家。
推荐阅读
- python - Django 在创建时自动将数据加载到数据库表中
- f# - 在 F# 中,当字符串具有一些轻量级降价属性时,如何按块拆分字符串列表?
- javascript - 将带有 jquery 的 html 模板转换为 React js
- eslint - 苗条与漂亮/eslint
- javascript - NodeJS require() 无法访问模块并且不返回任何函数
- vba - VBA 舍入函数,存储其值以供以后使用,收到“溢出”错误消息
- python - 从条目中获取值以在框架内
- python-3.x - 如何在 sklearn 中执行 train_test_split 但根据列的某个成员限制/指定输出?关闭
- javascript - vue + 复选框 + 更改事件 - 页面和控制台上的不同结果
- jenkins - 我们如何在两个 Jenkins 大师之间共享凭证