AsyncResult.AsyncWaitHandle プロパティ
アセンブリ: mscorlib (mscorlib.dll 内)

Win32 同期ハンドルをカプセル化し、各種の同期スキームを実装できるようにする WaitHandle。

このメソッドによって返される WaitHandle は、非同期操作が完了すると自動的にシグナル通知されます。
IAsyncResult を実装しているオブジェクトは、WaitHandle クラスから直接派生する必要はありません。WaitHandle は、同期プリミティブをラップし、呼び出しが完了した後でシグナル状態になる必要があります。これによって、クライアントが呼び出しのステータスをポーリングする代わりに、呼び出しが完了するまで待機できます。共通言語ランタイムは、Win32 同期プリミティブを反映した待機可能オブジェクトとして、ManualResetEvent、AutoResetEvent、Mutex などを提供します。
WaitHandle は、これらの同期オブジェクトの待機をサポートし、"any (一部)" または "all (すべて)" のセマンティクスでシグナル状態となるメソッドとして、WaitHandle.WaitOne、WaitAny、および WaitAll を提供します。これらのメソッドは、デッドロックを避けるためにコンテキストを認識します。AsyncResult.AsyncWaitHandle は、割り当て対象のオブジェクトを占有することも、オブジェクトをあまり拘束しないように割り当てることもできます。いずれの方法で割り当てるかは、IAsyncResult を実装するオブジェクトが選択します。
IAsyncResult を返すクラスを実装するオブジェクトには、AsyncWaitHandle をあまり拘束力のない方法で割り当てることができます。ただし、このハンドルは、割り当てた後は EndInvoke が呼び出されるまで有効なままです。このとき、AsyncWaitHandle が割り当てられているオブジェクトを再利用できます。
![]() |
---|
AsyncWaitHandle プロパティに格納されている WaitHandle を使用して、非同期の呼び出しが完了するまで現在のスレッドをブロックできます。ただし、WaitHandle は、BeginInvoke の呼び出し時に指定された AsyncCallback がある場合には、それを無視します。したがって、WaitHandle を使用して、非同期の呼び出しが完了するまでスレッドをブロックした場合でも、AsyncCallback が実行を完了する前にアプリケーションがシャットダウンしてしまう状況が生じる可能性があります。このような状況の例については、AsyncResult クラスのトピックの例を参照し、Thread.Sleep ステートメントを削除してください。 |

AsyncWaitHandle プロパティを使用して、デリゲートでの非同期呼び出しに対する WaitHandle を取得する方法を次のコード例に示します。プログラム例の全体については、AsyncResult クラスのトピックの例を参照してください。この例では、WaitHandle は明示的にシグナル通知されないことに注意してください。これは、IAsyncResult の実装が、このプロパティから取得した WaitHandle にシグナル通知する必要があるためです。
Dim sampleDelegate As New SampSyncSqrDelegate(AddressOf sampSyncObj.Square) param = 8 Console.WriteLine("Making a single asynchronous call on the context-bound object:") Dim ar1 As IAsyncResult = sampleDelegate.BeginInvoke(param, New AsyncCallback(AddressOf AsyncResultSample.MyCallback), param) Console.WriteLine("Waiting for the asynchronous call to complete...") Dim wh As WaitHandle = ar1.AsyncWaitHandle wh.WaitOne() Console.WriteLine("") Console.WriteLine("Waiting for the AsyncCallback to complete...") Thread.Sleep(1000)
SampSyncSqrDelegate sampleDelegate = new SampSyncSqrDelegate(sampSyncObj.Square); param = 8; Console.WriteLine("Making a single asynchronous call on the context-bound object:"); IAsyncResult ar1 = sampleDelegate.BeginInvoke( param, new AsyncCallback(AsyncResultSample.MyCallback), param); Console.WriteLine("Waiting for the asynchronous call to complete..."); WaitHandle wh = ar1.AsyncWaitHandle; wh.WaitOne(); Console.WriteLine(""); Console.WriteLine("Waiting for the AsyncCallback to complete..."); Thread.Sleep(1000);
SampSyncSqrDelegate^ sampleDelegate = gcnew SampSyncSqrDelegate( sampSyncObj, &SampleSyncronized::Square ); param = 8; Console::WriteLine( "Making a single asynchronous call on the context-bound Object*:" ); IAsyncResult^ ar1 = sampleDelegate->BeginInvoke( param, gcnew AsyncCallback( AsyncResultSample::MyCallback ), param ); Console::WriteLine( "Waiting for the asynchronous call to complete..." ); WaitHandle^ wh = ar1->AsyncWaitHandle; wh->WaitOne(); Console::WriteLine( "" ); Console::WriteLine( "Waiting for the AsyncCallback to complete..." ); Thread::Sleep( 1000 ); return 0;
SampSyncSqrDelegate sampleDelegate = new SampSyncSqrDelegate(sampSyncObj.Square); param = 8; value = param; Console.WriteLine("Making a single asynchronous call on the " + "context-bound object:"); IAsyncResult ar1 = sampleDelegate.BeginInvoke(param, new AsyncCallback(AsyncResultSample.MyCallback), sampleDelegate); Console.WriteLine("Waiting for the asynchronous call to complete..."); WaitHandle wh = ar1.get_AsyncWaitHandle(); wh.WaitOne(); Console.WriteLine(""); Console.WriteLine("Waiting for the AsyncCallback to complete..."); System.Threading.Thread.Sleep(1000);

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


Weblioに収録されているすべての辞書からAsyncResult.AsyncWaitHandle プロパティを検索する場合は、下記のリンクをクリックしてください。

- AsyncResult.AsyncWaitHandle プロパティのページへのリンク