c# - 为什么 System.Data.SqlClient.SqlDataAdapter 没有 FillAsync 方法?
问题描述
自然异步操作不受 CPU 限制,也没有线程。例如,文件读取是在 I/O 硬件中完成的,可以在没有线程的情况下异步启动,从而实现并发。每当我遇到讨论此问题的资源时,它们总是使用外部系统绑定操作作为示例,并且它们几乎总是具有“类似 I/O 或数据库操作”。
ADO.NET 有很多异步方法,比如SqlCommand.ExecuteReaderAsync
.,但它没有的一件事是System.Data.SqlClient.SqlDataAdapter.FillAsync
.
许多涵盖此内容的资源都建议您只使用Task.Run
,例如this和this,例如:
public Task<DataSet> GetDataSetAsync
(string sConnectionString, string sSQL, params SqlParameter[] parameters)
{
return Task.Run(() =>
{
using (var newConnection = new SqlConnection(sConnectionString))
using (var mySQLAdapter = new SqlDataAdapter(sSQL, newConnection))
{
mySQLAdapter.SelectCommand.CommandType = CommandType.Text;
if (parameters != null) mySQLAdapter.SelectCommand.Parameters.AddRange(parameters);
DataSet myDataSet = new DataSet();
mySQLAdapter.Fill(myDataSet);
return myDataSet;
}
});
}
但是该代码并不是真正的异步:仍然有一个线程。
那么,不拥有 是否是一个有意的决定FillAsync
,如果是,为什么?
解决方案
推荐阅读
- javascript - 使用 React JS 和 Laravel 将带有图像文件的 POST 请求发送到数据库时出现内部服务器错误
- javascript - 无效的拖放区元素
- c++ - Visual Studio 中的 OpenCV 在运行一次后崩溃
- angular - Okta 身份验证登录
- regex - 如何在 Linux 中读取文件并获取某些行
- django - 在 docker 中为 django 和 postgres 设置 db_password
- reactjs - 使用 react formik 进行空间验证
- java - Springboot 应用程序抛出了 java.lang.IllegalStateException
- css - 在悬停时在 Div 中的 Img 上显示 Box-Shadow
- python - 如何在python中创建和写入文本文件