2016-09-15 18 views
0

私はWebサービスコールを行い、ブラウザのページをレンダリングするC#Webアプリケーションを用意しています。 this adviceに続いて、私はsuccintインターフェイスと必要なすべてのコントロールを持っていたので、System.Net.WebClientをリクエストに使用しました。System.Net.WebClient - 非同期を使用する必要があります

WebClientは私にすべてのダウンロード方法の非同期バージョンを提供します。私はそれらを使うべきですか?私は現在のユーザーが待っている場合は気にしません。私はページをレンダリングする前にWebサービスの結果を必要とし、その間に(彼女のために)何もする必要はありません。しかし、1人のユーザのWebサービスコールが完了している間にサーバが縛られていると、本当に気になります。これがjavascriptの場合、メインスレッド上の同期Webリクエストは、少なくともウィンドウ全体を保持します。これはasp.netのケースですか? Webサービスのリクエストは、私がコントロールできない理由から、15回のメソッド呼び出しの一番下にあります。ドット私はすべての利点を見て非同期にそれらを変換する必要がありますか?

+0

Tl;それは依存する – Liam

答えて

0

一般的に言えば、async IOでは要求ごとの応答が高速になりませんが、理論的にはスループットが向上します。

public async Task<IActionResult> YourWebApiMethod() { 
    // at this point thread serving this request is returned back to threadpool and 
    // awailable to serve other requests 
    var result = await Call3ptyService(); 
    // once IO is finished we grab new thread from thread pool to finish the job 
    return result; 
} 

// thread serving this request is allocated for duration of whole operation 
public IActionResult YourWebApiMethod() { 
    return Call3ptyService().Result; 
} 

外部サービスを待っているすべてのスレッドがスレッドプール内にたくさんある場合、 Webサーバーが要求の処理を停止します。あなたの特定の問題について - 試してみてください。

+0

私は疑い始めた。私は、WebClientが非同期を実行するのに十分なほど賢いかもしれないと思っていましたが、それを私から隠すことを望んでいました。スレッドを解放し、リクエストを返したときに復帰します。私はあまりにも多くを望んでいることを今見て! – bbsimonbb

関連する問題