2

假设我打电话

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

2 回答 2

1

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

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

于 2013-01-23T19:46:13.003 回答
0

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

于 2013-01-23T21:03:00.773 回答