为什么System.Data.SqlClient.SqlDataAdapter不具有FillAsync方法?

时间:2018-07-30 15:58:46

标签: c# .net asynchronous ado.net

自然异步操作不受CPU限制,并且没有线程。例如,文件读取是在I / O硬件中完成的,可以在没有线程的情况下异步启动,从而实现并发。每当我遇到讨论此问题的资源时,它们总是使用外部系统绑定的操作作为示例,并且几乎总是具有“类似I / O或数据库操作”的功能。

ADO.NET具有许多异步方法,例如SqlCommand.ExecuteReaderAsync,但它没有的是System.Data.SqlClient.SqlDataAdapter.FillAsync

许多涉及此问题的资源都建议您只使用Task.Run,例如this onethis one,例如:

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是一个故意的决定吗?为什么?

0 个答案:

没有答案