AsyncResult.AsyncWaitHandle プロパティとは? わかりやすく解説

Weblio 辞書 > コンピュータ > .NET Framework クラス ライブラリ リファレンス > AsyncResult.AsyncWaitHandle プロパティの意味・解説 

AsyncResult.AsyncWaitHandle プロパティ

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

名前空間: System.Runtime.Remoting.Messaging
アセンブリ: mscorlib (mscorlib.dll 内)
構文構文

Public Overridable ReadOnly
 Property AsyncWaitHandle As WaitHandle
Dim instance As AsyncResult
Dim value As WaitHandle

value = instance.AsyncWaitHandle
public virtual WaitHandle AsyncWaitHandle { get;
 }
public:
virtual property WaitHandle^ AsyncWaitHandle {
    WaitHandle^ get ();
}
/** @property */
public WaitHandle get_AsyncWaitHandle ()
public function get AsyncWaitHandle
 () : WaitHandle

プロパティ値
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);
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
AsyncResult クラス
AsyncResult メンバ
System.Runtime.Remoting.Messaging 名前空間
WaitHandle



英和和英テキスト翻訳

英語⇒日本語日本語⇒英語

辞書ショートカット

すべての辞書の索引

AsyncResult.AsyncWaitHandle プロパティのお隣キーワード

   

英語⇒日本語
日本語⇒英語
   



AsyncResult.AsyncWaitHandle プロパティのページの著作権

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2026 Microsoft.All rights reserved.

©2026 GRAS Group, Inc.RSS