私たちには、HttpWebRequestを使用して多くのHTTP呼び出しを行い、データを取得するための大きなライブラリがあります。 HTTPClientで非同期呼び出しを利用するためにこのライブラリを書き直すことはクマになります。ですから、タスクファクトを使用してライブラリに呼び出す非同期コントローラを作成できるかどうか、そしてWebClient経由で最終的に行われる呼び出しが非同期であるか、それともまだ同期しているかどうかは疑問でした。古いHttpWebRequestと非同期を混ぜようとすると、何か問題や副作用がありますか?WebResponseをまだ非同期に呼び出すMVC非同期コントローラはありますか?
2
A
答えて
6
私があなたが何を提案しているか理解しているなら、いいえ、クライアントが話しているサービスを非同期に変更することは役に立たないでしょう。サーバーが非同期であるかどうかに関わらず、I/Oがサーバーと未処理の間にクライアントは依然としてCPUスレッドをブロックします。
HttpWebRequest
から切り替える理由はありません。 .NET 4.0でTaskFactory::FromAsync
を使用してHttpWebRequest::BeginGetResponse
を呼び出すことができます。 .NET 4.5では
WebRequest myWebRequest = WebRequest.Create("http://www.stackoverflow.com");
Task<WebResponse> getResponseTask = Task<WebResponse>.Factory.FromAsync(
myWebRequest.BeginGetResponse,
myWebRequest.EndGetResponse,
null);
getResponseTask.ContinueWith(getResponseAntecedent =>
{
WebResponse webResponse = getResponseAntecedent.Result;
Stream webResponseStream = webResponse.GetResponseStream();
// read from stream async too... eventually dispose of it
});
あなたははまだがHttpWebRequest
を使用し、非常に簡単の一体を生活を作るためにC#で新しいawait
機能を備えた新しいGetResponseAsync
メソッドを使用し続けることができます:
WebRequest myWebRequest = WebRequest.Create("http://www.stackoverflow.com");
using(WebResponse webResponse = await myWebRequest.GetResponseAsync())
using(Stream webResponseStream = webResponse.GetResponseStream())
{
// read from stream async, etc.
}
+0
ああ、ありがとう。コールがまだブロックされていると思ったので、WebRequestが非同期をサポートするように拡張されている可能性はありませんでしたが、確かにメソッドを参照すれば私の答えがわかります。ありがとう! – AlexGad
関連する問題
- 1. 非同期ライブラリから非同期呼び出しを行う?
- 2. MVCコントローラからのWCFサービスへの非同期呼び出し
- 3. Spring MVCコントローラからの非同期呼び出し
- 4. 非同期呼び出し
- 5. ASP.NET MVCの非同期コントローラ
- 6. ASP.NET MVCの非同期コントローラ
- 7. 非同期に同期メソッドを呼び出す
- 8. 非同期タスクを呼び出す
- 9. 非同期メソッドから非同期メソッドを呼び出す方法
- 10. UIスレッドで同期メソッドを非同期で呼び出す
- 11. 非同期呼び出しを同期化する方法
- 12. これは単純な非同期呼び出しを非同期にしていますか?
- 13. C#非同期呼び出しのタイムアウト
- 14. 非同期メソッド呼び出しのテスト
- 15. UIViewControllerと非同期の呼び出し
- 16. 非同期呼び出し後のコールタスクメソッド
- 17. ajaxForm非同期呼び出し
- 18. Android Okhttp非同期呼び出し
- 19. Javascriptオブジェクトと非同期呼び出し
- 20. 非同期リモート呼び出し
- 21. ADO.NETデータサービス:非同期呼び出し?
- 22. のstd ::非同期呼び出し
- 23. コールレスポンダーの非同期呼び出し
- 24. Pythonでの同期呼び出しへの非同期呼び出し
- 25. WCF非同期呼び出しが遅い、同期呼び出し高速
- 26. C#非同期呼び出しの同期化
- 27. C#での非同期シリアルポート呼び出しの同期クラスライブラリ
- 28. ASP.NET 4の非同期コントローラは意味がありますか?
- 29. JavaScriptでのイベントハンドラの非同期または同期呼び出し
- 30. Ajaxが非同期コントローラ経由でブラウザから呼び出します
'WebClient'は新しいものではなく、少なくとも.Net 1.1以来存在しています。あなたは 'HtppClient'を意味しますか?それは.NET 4.5とASP.NET MVC 4の新機能ですか? – svick
はい、混乱して申し訳ありません。あなたは正しいです、私は新しいHttpClientを意味しました。 – AlexGad