我有一個用.NET 4編寫的windows服務,它創建了包含無限運行(while)循環的多個線程。當我停止服務時,正在運行的布爾變成false,我們跳出while循環,一旦每個線程都這樣做,服務最終會停止。如何取消Microsoft ServiceBus MessageReceiver接收呼叫?
在while內部,它調用oMessageReceiver.Receive(TimeSpan.FromSeconds(30))。所以有時當我嘗試停止服務時,我必須等待30秒以使Receive()進程超時。
一種選擇是將超時從30秒降低到更小。我不確定它會帶來什麼樣的性能損失,但是由於這個過程沒有BrokeredMessage沒有做任何工作,我真的希望儘可能保持聽衆的開放。
我看到MessageReceiver上有一個.BeginReceive()方法。我有一種感覺,那就是我會在這裏使用一種編程模式,這會阻止我在等待接收超時時掛起服務。任何人都可以描述如何在無限運行的Windows服務中使用Begin/End APM函數嗎?