2

因此,因为 OracleCommand 类扩展了 DbCommand 类,所以它实现了它的 Execute 方法的异步版本。但是,我找不到对 Oracle 支持这些方法的 OracleCommand 类的任何引用(我使用的是 11g): http ://docs.oracle.com/html/E10927_01/OracleCommandClass.htm

有谁知道这是在幕后做什么来支持这些方法?它们似乎是非阻塞的,并且支持取消使用(老实说,我希望 NotImplementedException),但是由于文档的原因,这对我来说是不受支持的,所以我想确保没有任何问题。

4

1 回答 1

1

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

于 2013-10-25T20:15:25.127 回答