1

WCF Web サービスのパフォーマンスの向上について調査しています。この Web サービスは、応答に時間がかかる (5 秒以上) 他の Web サービスを呼び出します。サービスの負荷が高いと、ダウンストリーム サービスの応答を待っているため、すべてのスレッドが使用される状況が発生する可能性があります。これにより、システム全体がバックアップされます。

そこで、WCF async Task パターンを使用することが実際にここで役立つかどうかを調査しています。私の本当の質問は、応答を待っているダウンストリーム サービスを呼び出すスレッドに正確に何が起こるかということです。バックグラウンド ワーカー プールなどで、そのスレッドがまだ呼び出しに割り当てられていますか? 非同期タスクに移行すると、使用されるスレッドの数が実際に減少することを証明できる必要があります。

4

2 に答える 2

3

ここで必要なのは、実行時間の長いスレッドをスレッドプールに戻し、完了と呼ばれるものを実行して、そのスレッドに応答を取得させることです...基本的に、あなたの目標は、サービスへの着信要求をスレッドに処理させることです、次に、長時間待機している外部サービスを呼び出し、ほぼ即座にスレッド プールに戻り、サービスへの他のリクエストに使用できるようにします。次に、サード パーティ サービスの応答の準備ができたことを通知すると、それまたはスレッド プールからの別のスレッドが割り当てられ、応答を取得して処理します。

タスク フレームワークは並列化に向いており、スレッド プール ベースの完了/テーリング パターンには向いていません。何らかの作業を行うためにスレッドを生成しますが、かなり高度な方法で手動で介入しない限り、スレッドは長時間実行される呼び出しの間にプールに戻りません。代わりに調べることができるのは、非同期パターン呼び出し: Begin/End 構文です。

http://msdn.microsoft.com/en-us/library/ms228963(v=vs.100).aspx

これらのメソッド/完了は、応答を待っている間にスレッドをプールに解放します。これにより、そのスレッドが解放され、より多くのサービスの呼び出しを処理できるようになります。

.NET 4.5 を使用している場合、async/await キーワードはこのパターンのかなりのラッパーであり、代わりにそれらを使用できます。

于 2013-07-01T17:29:14.487 に答える