同时 SqlDataReader.Read()
实现了 IDataReader.Read()
,当使用像 ReadAsync()
这样的异步方法时,SqlDataReader
似乎没有接口(interface).
首先,如果我错了,请纠正我。
这有什么理由或理由吗?新的 async-await 有什么可以证明这里缺少接口(interface)的吗?只是有点莫名其妙。
最佳答案
虽然接口(interface)没有定义整个方法,但有一个通用的抽象类DbDataReader
which defines ReadAsync
.
不将 ReadAsync
作为 IDataReader
接口(interface)的一部分的最重要原因可能是为了避免向后兼容性方面的重大变化。
如果较新框架版本中的 IDataReader
会强制任何数据读取器 实现ReadAsync
,则任何依赖于此的 ADO.NET 提供程序或框架-调用的接口(interface)根本不会实现它,这些实现将被破坏。
也许他们可以使用接口(interface)隔离原则,他们可以定义一个名为IDataReaderAsync
的新接口(interface),它可以提供常规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
。
关于c# - 为什么没有 SqlDataReader.ReadAsync() 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37779411/