次の方法で共有


ISSAsynchStatus::WaitForAsynchCompletion (OLE DB)

非同期で実行している操作が完了するまで、またはタイムアウトが発生するまで待機します。

構文

HRESULT WaitForAsynchCompletion( 
        DWORD dwMillisecTimeOut);

引数

  • dwMillisecTimeOut[in]
    ミリ秒単位のタイムアウト。

リターン コード値

  • S_OK
    メソッドが成功しました。

  • E_UNEXPECTED
    ITransaction::Commit または ITransaction::Abort が呼び出されたか、初期化フェーズ中に行セットがキャンセルされたので、行セットが未使用状態です。

  • DB_E_CANCELED
    行セットの設定中またはデータ ソース オブジェクトの初期化中に、非同期処理がキャンセルされました。

  • DB_S_ASYNCHRONOUS
    指定したタイムアウトに達しても、操作が完了していません。

注意

ISSAsynchStatus::WaitForAsynchCompletion メソッドでは、上記のリターン コード値以外に、主要な OLEDB ICommand::Execute メソッドや IDBInitialize::Initialize メソッドによって返されたリターン コード値もサポートします。

説明

タイムアウト値 (ミリ秒) が経過するか、保留になっている操作が完了するまでは、ISSAsynchStatus::WaitForAsynchCompletion メソッドから制御が戻りません。Command オブジェクトには、タイムアウトまでにクエリが実行される秒数を制御する CommandTimeout プロパティがあります。ISSAsynchStatus::WaitForAsynchCompletion メソッドと組み合わせて使用すると、CommandTimeout プロパティは無視されます。

非同期操作では、タイムアウト プロパティが無視されます。ISSAsynchStatus::WaitForAsynchCompletion のタイムアウト パラメータに、制御が呼び出し元に返されるまでに経過する最大時間を指定します。タイムアウトが発生すると、DB_S_ASYNCHRONOUS が返されます。タイムアウトによって非同期操作がキャンセルされることはありません。タイムアウト期間内に完了しない非同期操作をアプリケーションでキャンセルする必要がある場合、タイムアウトを待機後、DB_S_ASYNCHRONOUS が返されたときに明示的に操作をキャンセルする必要があります。

注意

OLE DB サービス コンポーネントを使用していて、DB_S_ASYNCHRONOUS を待機しているときに S_OK が返されることがあります。そのため、S_OK または DB_S_ASYNCHRONOUS が返される場合は、ISSAsynchStatus::GetStatus を呼び出して完了をチェックする必要があります。

dwMillisecTimeOut の値を INFINITE に設定すると、ISSAsynchStatus::WaitForAsynchCompletion メソッドは操作が完了するまでブロックされます。dwMillisecTimeOut の値を 0 に設定すると、メソッドからすぐに制御が戻り、保留中の操作の状態が返されます。操作が完了する前にタイムアウトが発生すると、DB_S_ASYNCHRONOUS が返されます。

タイムアウトが発生する前に操作が完了すると、返される HRESULT には操作から返された HRESULT が設定されます (返される HRESULT は、操作が同期的に実行された場合に返される HRESULT になります)。

また、DBPROPSET_SQLSERVERROWSET プロパティ セットに SSPROP_ISSAsynchStatus プロパティが追加されています。ISSAsynchStatus インターフェイスをサポートするプロバイダは、値 VARIANT_TRUE を指定してこのプロパティを実装する必要があります。