c# - 为什么没有 SqlDataReader.ReadAsync() 接口(interface)

标签 c# sql async-await

同时 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/

相关文章:

MySQL:选择 if `field` = TRUE 否则获取最后一行

mysql - 合并 MySQL 中的 2 个表并自动填充缺失的列

javascript - 在异步等待中更新值

c# - Task.Delay(-1) 是否有任何用例?

c# - 无法编译 assemblyFileBinding

c# - 从 WPF 页面应用程序中删除导航栏

c# - System.Int32[] 显示而不是数组元素

mysql - SQL - 获取一个月的新事件计数并仅显示增加的值

c# - 如果使用的库不支持异步等待,在哪里使用 Task.Run

c# - 错误: New transaction is not allowed because there are other threads running in the session in c#