gpt4 book ai didi

c# - 在 ASP.NET 中异步填充数据集或数据表的最佳做法是什么?

转载 作者:可可西里 更新时间:2023-11-01 08:29:33 24 4
gpt4 key购买 nike

鉴于以下代码,我有几个关于最佳实践的问题:

string connectionString = @"Server=(local)\sqlexpress; Database=master; Integrated Security=true;";

using (SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlDataAdapter dataAdapter = new SqlDataAdapter("select * from information_schema.columns", connection))
{
await connection.OpenAsync();

DataTable dataTable = new DataTable();
await Task.Run(() => dataAdapter.Fill(dataTable));
return dataTable;
}
}

我见过几个将整个代码块包装在 Task.Run() 调用中的示例,但我不确定这是否比仅针对 DataAdapter.Fill() 方法调用 Task.Run() 更好,感觉更灵活和具体(仅在异步任务上使用 await)。

在 Fill() 方法上调用 Task.Run() 的方法是否比包装整个代码块更好?

在 Task.Run() 中调用 Fill() 是否有任何负面影响?如果 Fill() 出现错误,我正在考虑丢失调用堆栈和/或异常信息的问题。

有没有更好的方法在 ASP.NET 中编写它?

最佳答案

在 ASP.NET 中,使用 Task.Run 几乎无济于事。它究竟会改善什么?它只会引入开销。

也就是说,Fill 将执行 IO(耗尽数据读取器),因此您可能想要异步调用它。遗憾的是,此方法没有异步版本。

如果您坚持使用异步 IO (which is questionable for database access),您需要寻找替代方案。也许异步 Entity Framework 或原始 ADO.NET 可以帮助您。

关于c# - 在 ASP.NET 中异步填充数据集或数据表的最佳做法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25558715/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com