有誰知道爲什麼System.Messaging沒有提供Send方法的異步版本來發送MSMQ消息到隊列。System.Messaging - 爲什麼MessageQueue不提供發送異步版本
實際上,Peek和Receive方法有異步版本(通過可以轉換爲C#5異步等待方法的Begin/End對),但表面上沒有提供BeginSend/EndSend方法,只是一個Send方法在我看來,這是一個同步阻塞I/O調用。
我認爲這不是System.Messaging的限制,而是System.Messaging所使用的本機消息隊列API(mqrt.dll)之一,它使用重疊結構作爲函數MQReceiveMessage
中的參數以使用重疊的I/O與IOCP,而函數MQsendMessage
不採取這樣的結構,所以它似乎是一個純粹的同步調用。
我的問題仍然存在,任何人都會知道爲什麼MessageQueue API不提供將消息發送到隊列的異步方式?
感謝您指出文檔併爲您的評論Stephen提供意見。順便說一句我已經發布了一個後續相關的問題在這裏.. http://stackoverflow.com/questions/19748129/cpu-underutilized-due-to-blocking-i-o;) – darkey