try/catchブロックとIOTimeoutに依存しないように、次のコードブロックを変更するにはどうすればよいですか?この関数は1分ごとに呼び出されます。だから私はちょうどこれの最後の呼び出しの後にキューに入れられたIDのリストを処理したい。try/catchを取り除く - メッセージキューから読み取る
私は何のメッセージがキューで待機していなかったヌルを受け取った場合は、それは私の問題を解決してきただろうが、(私はスレッドをブロックすることはできません)同期している受信のAPI http://msdn.microsoft.com/en-us/library/system.messaging.messagequeue.receive.aspx は、すべての署名を示したりしてMessageQueueException try/catchブロックによってタップしなければならない例外。プログラムの流れを制御するためにtry/catchを使用しないことを提案している記事を読んだ後、私は避けたいものでした。
#pragma warning disable
public void ConsumeEvents2()
{
var listOfJobs = new List<int>();
try {
while (true) {
// receive all messages and add in a list to process later
Message message = messageQueue.Receive(new TimeSpan(0,0,3));
JobEvent evt = (JobEvent)message.Body;
listOfJobs.Add(evt.DataNumber);
}
} catch (MessageQueueException e) {
if (e.MessageQueueErrorCode == MessageQueueErrorCode.IOTimeout) {
// process the numbers received
ProcessJobList(listOfJobs);
return;
}
throw;
}
}
#pragma warning restore
それはWinフォームアプリケーションですか? – CharithJ
これはウェブアプリですが、問題ではありません。あなたはまだアプリケーションレベルの例外をキャッチしています –