【问题标题】:What does CloudQueue.EndAddMessage(IAsyncResult) actually do?CloudQueue.EndAddMessage(IAsyncResult) 实际上做了什么?
【发布时间】:2013-01-06 20:36:04
【问题描述】:

假设我打电话

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

【问题讨论】:

    标签: c# azure azure-storage azure-storage-queues


    【解决方案1】:

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

    更多信息请参考Asynchronous Programming Model (APM)。所有 End* 方法都完成了异步操作,这意味着它将阻塞直到操作完成,如果有则返回操作的结果,并进行清理。

    【讨论】:

    • 第二种方法(并行)不会创建线程;它只会从线程池中获取它们。
    【解决方案2】:

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

    【讨论】:

    • 谢谢,不过这不是我的主要问题——如果不清楚的话,抱歉。我仍然想知道函数 EndAddMessage 的作用以及是否/为什么需要调用它。
    猜你喜欢
    • 2013-06-02
    • 2020-11-21
    • 2015-02-26
    • 2017-06-29
    • 2013-06-13
    • 2021-10-25
    • 2011-08-12
    • 1970-01-01
    • 2010-11-27
    相关资源
    最近更新 更多