How to clean up the MSMQ listener?

I have code that is read from MSMQ using asynchronous API support that uses BeginReceive (), EndReceive () and the ReceivedCompleted event. The main template (taken from MessageQueue.ReceiveCompleted Event ...

void StartListening()
{
   _msgQ.ReceiveCompleted += ReceiveCompletedEventHandler(FooReceiveCompleted);
   _msgQ.BeginReceive();
}

void FooReceiveCompleted(Object source, ReceiveCompletedEventArgs asyncResult)
{
   Message msg = _msgQ.EndReceive();
   // Do stuff with message.

   // Set up listening for next message.
   _msgQ.BeginReceive();
}

void StopListening()
{
   _msgQ.Close();
}

The problem that I see is that it always waits for BeginReceive () waiting, for a new message, and while reading .Net documents does not seem to be the official / recommended way to clear it to stop listening.

EndReceive(), , , . , , Close() MSMQ (, , ), EnableConnectionCache false, . , .

, , , MessageQueue.ClearConnectionCache(), , , , .

: ( MessageQueue.Close())...

Close , . , Close :

MessageQueue . MessageQueue (String, Boolean) MessageQueue (String, Boolean, Boolean) sharedModeDenyReceive .

MessageQueue . , MessageQueue (String, Boolean, Boolean) enableConnectionCache - false.

. EnableConnectionCache false.

, API , ( BeginReceive/EndReceive), .

+3
2

, # MessageQueue.ReceiveCompleted Event MSDN BeginReceive() . , , , .

Close() MessageQueue, MessageQueue.

BeginReceive (Timeout); ReceiveCompleted, , , , . , . a WaitHandle, ReceiveCompleted . - BeginReceive() ( 1 2 ).

0

Event Driven . 2018-12-19 URL 404.

0

All Articles