2006年12月10日

MessageQueueのバグ?

  
これってバグ?

 MessageQueue mq = new MessageQueue(QueueName);
mq.Formatter = new XmlMessageFormatter( new Type[] { typeof(System.String) });
mq.ReceiveCompleted += new ReceiveCompletedEventHandler(mq_ReceiveCompleted);
mq.BeginReceive(TimeSpan.FromSeconds(10.0));


...
void mq_ReceiveCompleted(object sender, ReceiveCompletedEventArgs e) {
IAsyncResult isr = e.AsyncResult;
if (isr.IsCompleted == false) {
// タイムアウトならここに来るはず
}
System.Messaging.Message msg = queue.EndReceive(e.AsyncResult);
...
}

マニュアルには、
このオーバーロードでタイムアウトを指定します。timeout パラメータで指定した間隔が経過すると、このコンポーネントは ReceiveCompleted イベントを発生させますが、操作に関連付けられた IAsyncResult の IsCompleted プロパティは false になります。メッセージが存在しないため、後続の EndReceive 呼び出しでは例外がスローされます。

と書いてあるけど、 タイムアウトになっても、IsCompleted プロパティは true のままみたいだ。

しかたないので、EndReceive で発生する例外をキャッチすることにした。


 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/50661312