2015年12月25日

HttpClientクラスでHTMLをダウンロード時、応答がなくなった場合の対処法

.NET4.5で登場した、HttpClientクラスはとても便利です。
以前はWebClientやHttpResponse/HttpRequestクラスなどを使っていましたが、それよりも格段に使い勝手がよくなっています。

ただ注意点もあります。HttpClientクラスでは非同期によるダウンロードメソッドが用意されていますが、場合によってはスレッドデッドロックが発生し、結果が返らない状態が永遠に続く、という現象に陥ることがあります。
さらに、タイムアウトを設定しても、非同期呼び出しだとタイムアウト機能が無効化されるのです。
そのため、ダウンロードメソッド呼び出し後に、結果が返ってこない、反応がない、固まった、という現象に見舞われることもあります。

私もその現象が発生しましたが、ConfigureAwaitメソッドを呼び出して解決することができました。
詳しくは、下記のサイトをご覧ください。

HttpClientクラスの利用サンプルはこちら(タイムアウト設定可能)
http://www.atmarkit.co.jp/ait/articles/1501/06/news086.html


ConfigureAwait(false)の記述で回避できるという情報
http://www.slideshare.net/neuecc/httpclient

※「スレッド デッドロック ConfigureAwait」で検索すれば、いろいろな情報が得られます。
posted by キヨ at 14:06| Comment(0) | TrackBack(0) | .NET技術
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

※ブログオーナーが承認したコメントのみ表示されます。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/170572354
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック