2013-01-23 463 views
2

比方說,我叫CloudQueue.EndAddMessage(IAsyncResult)實際上做了什麼?

AsyncCallback callback = new AsyncCallback(QueueMessageAdded); 
queue.BeginAddMessage(new CloudQueueMessage(message), callback, null); 

其中QueueMessageAdded

private static void QueueMessageAdded(IAsyncResult result) 
{ 
    queue.EndAddMessage(result); 
} 

是什麼EndAddMessage嗎?

包括等待已呼籲所有的回調,這是因爲調用同步版本這樣的慢:

Parallel.ForEach(messages, message => queue.AddMessage(message)); 

回答

1

第一種辦法發出請求異步模式,因此您的線程沒有在等待封鎖作爲迴應。另一方面,第二種方法將使用N個線程,每個線程將阻塞,直到收到其各自請求的響應。

欲瞭解更多信息請參閱Asynchronous Programming Model (APM)。所有End *方法完成異步操作,這意味着它將阻塞直到操作完成,返回操作的結果(如果有的話),並進行清理。

+0

第二種方法(並行)不會創建線程;它只會從線程池中獲取它們。 – Henrik

+0

感謝您的糾正。 –

0

第一種方法允許您使用併發請求!單個線程可以通過第一種方法發送數百個併發消息,即使單個POST請求獲得其答覆的延遲很高。如果你看看production code targeting ASB,你可以看到使用APM/Async的一些模式。

+0

謝謝,雖然這不是我的主要問題 - 對不起,如果不清楚。我仍然想知道EndAddMessage函數的作用,以及/爲什麼有必要調用它。 –

相關問題