MessageQueue.BeginReceive メソッド (TimeSpan)
指定したタイムアウトのある非同期の受信操作を実行します。この操作は、メッセージをキューで使用できるようになる、タイムアウトが発生するまで完了しません。
Overloads Public Function BeginReceive( _
ByVal timeout As TimeSpan _) As IAsyncResult
[C#]
public IAsyncResult BeginReceive(TimeSpantimeout);
[C++]
public: IAsyncResult* BeginReceive(TimeSpantimeout);
[JScript]
public function BeginReceive(
timeout : TimeSpan) : IAsyncResult;
パラメータ
- timeout
メッセージを使用できるようになるまでの待機時間を示す TimeSpan 。
戻り値
ポストされた非同期要求を識別する IAsyncResult 。
例外
例外の種類 | 条件 |
---|---|
ArgumentException | timeout パラメータに指定された値が無効です。負数の可能性があります。 |
MessageQueueException | メッセージ キューの API にアクセスしたときにエラーが発生しました。 |
解説
非同期処理では、メッセージがキューで使用できるようになったとき、または指定した時間が経過したときに、 BeginReceive を使用して ReceiveCompleted イベントを発生させます。
メモ メッセージが既にキューに存在する場合は、 ReceiveCompleted も発生します。
BeginReceive を使用するには、非同期操作の結果を処理するイベント ハンドラを作成し、そのイベント ハンドラをイベント デリゲートに関連付けます。 BeginReceive が非同期受信操作を開始し、 ReceiveCompleted イベントの発生によって、メッセージがキューに到達したことが MessageQueue に通知されます。これで、 MessageQueue は、 EndReceive を呼び出すか、 ReceiveCompletedEventArgs を使用して結果を取得することによって、メッセージにアクセスできます。
メモ BeginReceive メソッドからすぐに制御が戻りますが、非同期操作はイベント ハンドラが呼び出されるまで完了しません。
BeginReceive は非同期であるため、これを呼び出すことによって、現在の実行スレッドをブロックせずにキューからメッセージを受信できます。メッセージを同期的に受信するには、 Receive メソッドを使用します。
非同期操作が完了した後で、 BeginPeek または BeginReceive をイベント ハンドラでもう一度呼び出すと、通知の受信を継続できます。
CanRead が false の場合、完了イベントは発生しますが、 EndReceive を呼び出したときに例外がスローされます。
BeginReceive が返す IAsyncResult は、メソッドが開始した非同期操作を識別します。操作の有効期間を通じて、この IAsyncResult を使用できます。ただし、通常これは EndReceive が呼び出されるまでは使用しません。しかし、複数の非同期操作を開始する場合は、それらの IAsyncResult 値を 1 つの配列内に配置して、すべての操作の完了を待つか、どれか 1 つの操作の完了を待つかを指定できます。この場合は、 IAsyncResult の AsyncWaitHandle プロパティを使用して、完了した操作を識別します。
このオーバーロードでタイムアウトを指定します。 timeout パラメータで指定した間隔が経過すると、このコンポーネントは ReceiveCompleted イベントを発生させますが、操作に関連付けられた IAsyncResult の IsCompleted プロパティは false になります。メッセージが存在しないため、後続の EndReceive 呼び出しでは例外がスローされます。
メモ トランザクションに対して BeginReceive を非同期に呼び出さないでください。トランザクションの非同期操作を実行するには、 BeginPeek を呼び出し、トランザクションと (同期) Receive メソッドを、ピーク操作用に作成したイベント ハンドラに配置します。イベント ハンドラに、次の C# コードに示す機能が含まれている可能性があります。
myMessageQueue.BeginTransaction();
myMessageQueue.Receive();
myMessageQueue.CommitTransaction();
このメソッドが各種のワークグループ モードで使用できるかどうかを次の表に示します。
ワークグループ モード | 使用可否 |
---|---|
ローカル コンピュータ | はい |
ローカル コンピュータ + 直接書式名 | はい |
リモート コンピュータ | いいえ |
リモート コンピュータ + 直接書式名 | はい |
必要条件
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ
.NET Framework セキュリティ:
- 直前の呼び出し元の完全信頼。このメンバは、部分的に信頼されているコードから使用することはできません。詳細の参照先 : 部分信頼コードからのライブラリの使用
参照
MessageQueue クラス | MessageQueue メンバ | System.Messaging 名前空間 | MessageQueue.BeginReceive オーバーロードの一覧 | EndReceive | ReceiveCompleted | BeginPeek | Receive | Peek | TimeSpan