如果想檢索消息但不阻礙應用程序的處理可異步檢索消息在異步消息處理中啟動任務的方法被立即返回而不等待結果應用程序可以在任務完成過程中繼續它原來的工作任務完成時服務器可以通知應用程序消息已被成功處理
有兩種類型的異步消息處理操作異步接收消息和異步查看消息異步檢索消息時使用 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/ASP/201311/21899.html