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

最初のアプローチではリクエストが非同期的に行われるため、レスポンスを待っている間、スレッドをブロックする必要はありません。一方、2 番目のアプローチでは N 個のスレッドが使用され、それぞれの要求に対する応答が受信されるまで各スレッドがブロックされます。

詳細については、非同期プログラミング モデル (APM)を参照してください。すべての End* メソッドは非同期操作を完了します。つまり、操作が終了するまでブロックされ、操作の結果があればそれを返し、クリーンアップを行います。

于 2013-01-23T19:46:13.003 に答える
0

最初のアプローチでは、同時リクエストを使用できます! 1 つの POST 要求が応答を受け取るまでの待ち時間が長くても、最初のアプローチでは、1 つのスレッドで数百のメッセージを同時に送信できます。ASB を対象とする製品コードを見ると、APM/Async の使用方法にいくつかのパターンが見られます。

于 2013-01-23T21:03:00.773 に答える