共用方式為


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 屬性會控制查詢在逾時前執行的秒數。如果搭配 ISSAsynchStatus::WaitForAsynchCompletion 方法使用,將會忽略 CommandTimeout 屬性。

非同步作業會忽略逾時屬性。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 的值實作此屬性。