添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
  • 2022-02-09 Mongodb初探
  • 2022-02-09 PHP连接MySQL数据库的几种方式
  • 2022-02-09 CSS实现多重边框和内凹圆角
  • 2022-02-09 遮罩动画效果
  • 2021-04-17 java web 站内信
  • 2021-04-17 利用java执行shell脚本
  • 2022-06-16 网站域名备案好处真的很多
  • 鉴于以下代码,我有几个关于最佳实践的问题:

    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 可以帮助您。

     京ICP备19004545号