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();
_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), .