如果想檢索消息但不阻礙應用程序的處理
可異步檢索消息
在異步消息處理中
啟動任務的方法被立即返回而不等待結果
應用程序可以在任務完成過程中繼續它原來的工作
任務完成時
服務器可以通知應用程序消息已被成功處理
有兩種類型的異步消息處理操作
異步接收消息和異步查看消息
異步檢索消息時
使用 BeginReceive 方法和 EndReceive 方法標記操作的開始和結束
所發生的操作如下所示
當隊列上的消息變得可用時
或者如果要查看或接收的消息已經存在
BeginReceive 方法將立即返回
並引發名為 ReceiveCompleted 的事件
ReceiveCompleted 事件返回一個 IAsyncResult 類型的對象
該對象包含有關異步操作的信息
接收到完成的事件後
調用 EndReceive 方法完成操作
在最後的調用中
可以訪問消息或通過訪問 ReceiveCompletedEventArgs 類檢索該消息
在操作的整個生存期內都可以訪問 IAsyncResult 對象
但通常在調用 EndReceive 後才會使用該對象
但是
如果啟動多個異步操作
則可將這些操作的 IAsyncResult 值放在數組中
並指定是等待所有操作完成還是任一操作完成
在這種情況下
使用 IAsyncResult 對象的 AsyncWaitHandle 屬性標識已完成的操作
與 Receive 一樣
Peek 使用兩個名為 BeginPeek 和 EndPeek 的方法來標記異步操作的開始和結束
當消息可用時
BeginPeek 立即返回
並引發名為 PeekCompleted 的事件
與 ReceiveCompleted 一樣
該事件返回一個 IAsyncResult 對象
可以通過使用該對象來獲取此操作的有關信息
另外
異步接收和查看操作均可使用超時時限來指定等待多長時間使消息變得可用
要完成此操作
可以使用任一方法的重載形式來傳遞一個 TimeSpan 對象
指示等待的時間
如果超時時間到期
但 IAsyncResult 對象上的 IsCompleted 屬性設置為 false
指示有消息尚未處理時
將引發 ReceiveCompleted 或 PeekCompleted 事件
From:http://tw.wingwit.com/Article/program/net/201311/12628.html