共用方式為


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 的值實作此屬性。

另請參閱

執行非同步作業
ISSAsynchStatus (OLE DB)