ISSAsynchStatus::WaitForAsynchCompletion (OLE DB)

一直等待,直到异步执行的操作完成或发生超时。

语法

HRESULT WaitForAsynchCompletion( 
        DWORD dwMillisecTimeOut);

参数

  • dwMillisecTimeOut[in]
    超时值(毫秒)。

返回代码值

  • S_OK
    方法成功。

  • E_UNEXPECTED
    因为已调用 ITransaction::CommitITransaction::Abort 或在行集初始化阶段取消了行集,因此行集处于未使用状态。

  • DB_E_CANCELED
    异步处理在行集填充或数据源对象初始化过程中被取消。

  • DB_S_ASYNCHRONOUS
    此操作尚未完成,即使已达到指定的超时值。

注意注意

除了上面列出的返回代码值之外,ISSAsynchStatus::WaitForAsynchCompletion 方法还支持由核心 OLEDB ICommand::ExecuteIDBInitialize::Initialize 方法返回的返回代码值。

注释

在经过超时值(毫秒)或完成挂起操作之前,ISSAsynchStatus::WaitForAsynchCompletion 方法将不会返回值。Command 对象具有 CommandTimeout 属性,该属性控制查询在超时之前将运行的秒数。如果 CommandTimeout 属性与 ISSAsynchStatus::WaitForAsynchCompletion 方法结合使用,则将忽略前者。

对于异步操作,将忽略超时属性。ISSAsynchStatus::WaitForAsynchCompletion 的超时参数指定在将控制权返回到调用方之前将经过的最大时间量。如果此超时值已到期,将返回 DB_S_ASYNCHRONOUS。超时从不会取消异步操作。如果应用程序需要取消在超时期限内未完成的异步操作,则它必须等待发生超时,然后,如果返回 DB_S_ASYNCHRONOUS,则显式取消此操作。

注意注意

当使用 OLE DB 服务组件时,在应返回 DB_S_ASYNCHRONOUS 时可能返回 S_OK,因此,应用程序应调用 ISSAsynchStatus::GetStatus 以检查在返回 S_OK 或 DB_S_ASYNCHRONOUS 时操作是否已完成。

如果 dwMillisecTimeOut 值设置为 INFINITE,则 ISSAsynchStatus::WaitForAsynchCompletion 方法将在该操作完成之前一直阻止其他操作。如果 dwMillisecTimeOut 值设置为 0,则该方法将立即返回并提供挂起操作的状态。如果在完成此操作之前超时值已到期,则将返回 DB_S_ASYNCHRONOUS。

如果操作在超时值到期之前完成,则返回的 HRESULT 将为由此操作返回的 HRESULT(如果此操作已以异步方式执行,则应已返回 HRESULT)。

此外,SSPROP_ISSAsynchStatus 属性已添加到 DBPROPSET_SQLSERVERROWSET 属性集。支持 ISSAsynchStatus 接口的访问接口必须使用值 VARIANT_TRUE 实现此属性。