为什么没有SqlDataReader.ReadAsync()

时间:2016-06-12 21:51:36

标签: c# sql async-await

虽然SqlDataReader.Read()实现了IDataReader.Read(),但在使用ReadAsync()等异步方法时似乎没有SqlDataReader的界面。

首先,如果我错了,请纠正我。

这有什么理由或理由吗?有没有什么关于新的async-await东西证明缺乏接口在这里?这有点莫名其妙。

1 个答案:

答案 0 :(得分:8)

虽然界面没有定义整个方法,但是有一个共同的抽象类DbDataReader which defines ReadAsync

未将ReadAsync作为IDataReader界面的一部分包含在内的最重要原因可能是避免在向后兼容性方面发生重大变化。

如果较新的框架版本中的IDataReader会强制任何数据读取器实现ReadAsync,那么任何依赖于所谓接口的ADO.NET提供者或框架都不会完全实现它,这些实现将被打破。

也许他们可以使用接口隔离原则,他们可以定义一个名为IDataReaderAsync的新接口,它可以提供常规IDataReader成员的异步风格......但是,至少,他们已经提供了一个已经由许多框架类派生的基类:

  

System.Data.DataTableReader

     

System.Data.EntityClient.EntityDataReader

     

System.Data.Odbc.OdbcDataReader

     

System.Data.OleDb.OleDbDataReader

     

System.Data.OracleClient.OracleDataReader

     

System.Data.SqlClient.SqlDataReader

......和第三方ADO.NET提供商' IDataReader也可能派生DbDataReader