3

私は多くのWebサービスを持っていますが、それらが呼び出されたときに、戻る前に他の外部サービスを呼び出して情報を得る必要があります。これはすべて同期的に行われます。

したがって、映画のリストを返す映画 GET サービスがある場合、Web サービス ロジックは、映画プロバイダーの外部サービスがデータを返すのを待ち、それを処理して、GET 用のデータを返します。

外部サービス呼び出しを Task にラップし、async/await モデルを使用することで、何らかのメリットがあることが証明されますか? GET を処理する最初のスレッドは、応答を待ってブロックされたままになるのでしょうか?それとも、他の着信サービス呼び出しを処理するために解放されるのでしょうか?

4

2 に答える 2

5

外部サービス呼び出しを Task にラップし、async/await モデルを使用することで、何らかのメリットがあることが証明されますか?

同期呼び出しをラップしても、おそらく大きなメリットはありませんが、外部サービスが本物の非同期 API も提供する場合、大きなメリットが得られる可能性があります。

GET を処理する最初のスレッドは、応答を待ってブロックされたままになるのでしょうか?それとも、他の着信サービス呼び出しを処理するために解放されるのでしょうか?

現時点では、非同期に対する WCF のサポートがどのようなものかはわかりませんが、実際に実行する作業があるときにのみスレッドをアクティブにできるように、これらすべてを記述できるはずです。したがって、何百もの処理を行うことができます。ほんの数スレッドで一度に複数のリクエストを送信できます。これは、外部サービスの呼び出しが比較的遅い場合に特に重要です。

基本的に、得られる利益はありますが、次の 2 つの側面を別々に検討する必要があります。

  • そもそもあなたが書いているタイプの Web サービスの非同期サポート。WCF 内の非同期メソッドの観点からサービスを表現できますか?
  • 呼び出す外部サービス

これらの側面のそれぞれに利点がありますが、両方の側面が完全にサポートされている場合、最大の利点が得られ、コードが最も単純になります。

于 2013-06-04T08:38:25.530 に答える