0

.NET は、IAsyncResult、BeginMethod()、EndMethod() という非同期パターンを提供します。Method() を呼び出すだけで、対応する同期パターンを使用するよりも、このパターンを使用する方が常に優れていると思います。

UI を処理する場合、確実に非同期パターンを使用すると、同期パターンよりも優先されます。これは、Method() 内のジョブが実行されている間、他のタスクを現在のスレッドで処理できるためです。

しかし、サーバーを開発している場合はどうでしょう。Method() が DB 呼び出しを行い、DB 呼び出しから結果を取得する前に Method() を処理する現在のスレッドが何もしていないとします。この場合、非同期パターンに必要なオーバーヘッドをいくらか節約できるため、同期パターンを使用する方が非同期パターンよりも優れていると思います。

どう思いますか?すべての場合において、サーバー開発でも同期パターンを使用するよりも、(リソースを節約するという観点から) 非同期パターンを使用する方が常に優れていますか?

ありがとう

4

1 に答える 1

2

しかし、サーバーを開発している場合はどうでしょう。Method() が DB 呼び出しを行い、DB 呼び出しから結果を取得する前に Method() を処理する現在のスレッドが何もしていないとします。この場合、非同期パターンに必要なオーバーヘッドをいくらか節約できるため、同期パターンを使用する方が非同期パターンよりも優れていると思います。

非同期メソッド呼び出しが IO を待機しているため非同期である場合、サーバーで非同期メソッドを使用することは大きなメリットです。サーバーは、通知にシグナルを使用する非同期メソッド呼び出しが完了するのを待っている現在のスレッドを解放して再利用できます。

メソッドが IO バウンドの非同期メソッドは、サーバーのスケーラビリティを大幅に向上させることができます。

そうは言っても、私は と を避けIAsyncResultAPM代わりにタスクベースの非同期パターン ( を返す単一のメソッドTask<T>) を、C# 5 の言語によって提供される新しい構成機能 ( async/awaitキーワード) と組み合わせて使用​​します。これらは、サーバー側のメソッドを非同期で実装する場合に特に便利です。戻り値Task<T>を持つメソッドを作成するawaitと、同期メソッドとほぼ同じ制御フローで実行できるからです。

于 2013-07-02T00:49:55.407 に答える