質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

0回答

885閲覧

【C#】WebClient.OpenReadTaskAsyncが終わらない

yonotsui

総合スコア28

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2021/10/18 10:32

画像データを読み込むためにSystem.Net.WebClientの関数「OpenReadTaskAsync」を使用しています。
たいていのURLは読み込めますがURLによっては関数が終了しないことがあります。
WebClientを継承してタイムアウトの時間を変更もしましたが、指定した時間を超過しても関数が終わりません。

理想としては画像が読み込めるように修正するか、読み込めない場合は正しく終了させたいと考えています。
修正方法を教えて頂けないでしょうか。

ソース

//実行する関数 public async void CallTest() { await CalcPerceptualDhash("https://joshinweb.jp/emall/img/sm/JSN_C00001/middle/45/71237/4571237660542.jpg").ConfigureAwait(false); } private class MyWebClient : WebClient { protected override WebRequest GetWebRequest(Uri uri) { WebRequest w = base.GetWebRequest(uri); w.Timeout = 3 * 1000; return w; } } /// <summary> /// /// </summary> /// <param name="url"></param> /// <returns></returns> public static async Task<string> CalcPerceptualDhash(String url) { Bitmap image = null; try { using (var wc = new MyWebClient()) { using (var stream = await wc.OpenReadTaskAsync(url).ConfigureAwait(false)) { image = new Bitmap(stream); } } } catch (Exception ex) { } if (image == null) { return null; } return null;//読み込んだ後の処理は省略 }

参考

How to change the timeout on a .NET WebClient object
https://stackoverflow.com/questions/1789627/how-to-change-the-timeout-on-a-net-webclient-object

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/10/18 10:42

まず catch (Exception ex) で例外をなかったことにするのは止めましょう。
yonotsui

2021/10/18 10:46

>まず catch (Exception ex) で例外をなかったことにするのは止めましょう。 実際の処理ではログに出力しておりますが、質問内容には全く関係ないので省略しています。
退会済みユーザー

退会済みユーザー

2021/10/18 10:49

> 実際の処理ではログに出力しておりますが、質問内容には全く関係ないので省略しています。 質問にそう書いといてください。
yonotsui

2021/10/18 10:53

それを追記することで今回の質問内容に何か影響が出るのでしょうか。 もしあるのであれば次回から留意させていただきます。
退会済みユーザー

退会済みユーザー

2021/10/18 11:13

恥をかくのはあなた。もうどうでもいい。ご勝手に
gentaro

2021/10/19 01:19 編集

質問内容に影響がないなら書かなくて良い、というのであれば、try-catchブロックも書く必要ないやん。 質問者がどういう意図でコードを削ってるのかという意図は第三者にはわかんないんだから、中途半端に省略するぐらいなら全部書かくべきだし、本当に影響がない事が確認できているから省略する(つまり中途半端ではないという自信がある)、というのであればtry-catchブロック含めて書かない方が良いでしょう。 一般的に悪習とされるコード載せられて「これで問題が起きたけどどこが悪いんでしょうか?」って聞かれても、質問者の知識や調査力、理解力に疑問を抱くだけで、ちゃんと回答しても理解できないんじゃないか、と不審に思われるデメリットはあっても、メリットが一切ない。 せめてcatchブロック内で「// ここでログを出力」とか書いてあるならわかるけども。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問