为什么没有SqlDataReader.ReadAsync()的接口

Nat*_*per 3 c# sql async-await

虽然SqlDataReader.Read()实现了IDataReader.Read(),但SqlDataReader在使用异步方法时似乎没有接口ReadAsync().

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

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

Mat*_*zer 9

虽然接口没有定义整个方法,但是有一个共同的抽象类DbDataReader定义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.