CloudQueue.EndAddMessage(IAsyncResult)实际上做了什么

本文关键字:什么 实际上 EndAddMessage IAsyncResult CloudQueue | 更新日期: 2023-09-27 17:55:15

假设我打电话

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));

CloudQueue.EndAddMessage(IAsyncResult)实际上做了什么

第一种方法异步发出请求,因此您的线程在等待响应时不必阻塞。另一方面,第二种方法将使用 N 个线程,每个线程都将阻塞,直到收到对其各自请求的响应。

有关详细信息,请参阅异步编程模型 (APM)。所有 End* 方法都完成异步操作,这意味着它将阻塞直到操作完成,返回操作的结果(如果有),然后执行清理。

第一种方法允许您使用并发请求!使用第一种方法,单个线程可以发送数百条并发消息,即使单个 POST 请求获取其回复的延迟很高。如果您查看针对 ASB 的生产代码,您可以看到如何使用 APM/Async 的一些模式。