Oracle.DataAccess.Client.OracleCommand ExecuteReaderAsync
本文关键字:ExecuteReaderAsync OracleCommand Client DataAccess Oracle | 更新日期: 2023-09-27 18:37:03
所以因为OracleCommand类扩展了DbCommand类,所以它实现了它的Execute方法的异步版本。 但是,我找不到任何对来自 Oracle 的支持这些方法的 OracleCommand 类的引用(我使用的是 11g):http://docs.oracle.com/html/E10927_01/OracleCommandClass.htm
有谁知道这在幕后支持这些方法做什么? 它们似乎是非阻塞的,并且支持在使用中取消(老实说,我希望有一个 NotImplementException),但由于文档的原因,这对我来说是不受支持的,所以我想确保没有任何陷阱。
Oracle 客户端不会重写方法的异步版本。它们使用默认DbCommand
调用方法的非异步版本的实现。
例如,ExecuteNonQueryAsync
的实现是:
// System.Data.Common.DbCommand
public virtual Task<int> ExecuteNonQueryAsync(CancellationToken cancellationToken)
{
if (cancellationToken.IsCancellationRequested)
{
return ADP.CreatedTaskWithCancellation<int>();
}
CancellationTokenRegistration cancellationTokenRegistration = default(CancellationTokenRegistration);
if (cancellationToken.CanBeCanceled)
{
cancellationTokenRegistration = cancellationToken.Register(new Action(this.CancelIgnoreFailure));
}
Task<int> result;
try
{
result = Task.FromResult<int>(this.ExecuteNonQuery());
}
catch (Exception ex)
{
cancellationTokenRegistration.Dispose();
result = ADP.CreatedTaskWithException<int>(ex);
}
return result;
}
如您所见,它只是在后台调用ExecuteNonQuery
(ExecuteNonQueryAsync
的无参数重载调用此版本的方法)。