teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

表現修正

2017/05/11 13:36

投稿

tamoto
tamoto

スコア4346

answer CHANGED
@@ -1,7 +1,7 @@
1
1
  こんにちは。
2
2
 
3
3
  ちょっと今検証できてないのでおそらくですが、、
4
- `client.Timeout = TimeSpan.FromSeconds(1);`としているので、「GetStringAsyncの処理に1秒以上掛かったときにTaskがキャンセルされている」からだと思います。なんの目的でTimeoutを1secに設定しているのかが分からないのでなんともいえないですが、Timeoutを設定てい以上、「HttpClientのTaskはキャンセルされる可能性がある」という前提でコードを組むようにしてください。
4
+ `client.Timeout = TimeSpan.FromSeconds(1);`としているので、「GetStringAsyncの処理に1秒以上掛かったときにTaskがキャンセルされている」からだと思います。なんの目的でTimeoutを1secに設定しているのかが分からないのでなんともいえないですが、Timeout長くすれば今回のエラーはほぼ発生なくなはずです。まあちゃんとするならTimeoutの設定に関わらず「HttpClientのTaskはキャンセルされる可能性がある」という前提でコードを組むようにした方がいです
5
5
 
6
6
  あと、質問とは関係ないのですが、HttpClientはIDisposableを実装しているくせにusing非推奨という曲者なので、2回以上呼ぶ可能性があるならメンバ変数化してしまうことをオススメします。
7
7
  詳しくは以下の記事をどうぞ。