UWPアプリからAPIリクエストして、ファイルダウンロード時のタイムアウト処理を行いたい。
C# UWP でWEBサーバのAPIを呼び出し、ファイルダウンロード処理を行っています。
ダウンロード中に回線が切断された場合に、タイムアウト処理を行いたいのですが、タイムアウト設定が効きません。(例では100秒にしています)
具体的にはデバックで「 client.PostAsync」を投げた直後にLANを引っこ抜いて断線状態にしています。
ファイルダウンロード自体は40秒ほどかかる処理です、数秒のうちに断線すると割とタイムアウト(TaskCanceledException)になりますが、
10数秒経過してから断線すると、待ちっぱなしになります。
発生している問題・エラーメッセージ
タイムアウト(TaskCanceledException) が想定通りに発生しない
ソースコード
private static HttpClient client = new HttpClient() { Timeout = TimeSpan.FromMilliseconds(100.0 * 1000) }; const string apiUrl = "https://$APIURL"; const string jsonSendData = "{ $JOSON文字列 }"; public async void Btn_Click(object sender, RoutedEventArgs e) { await Task.Run(async () => { result = await TimeoutAsync(); }); } async Task<string> TimeoutAsync() { try { var content = new StringContent(jsonSendData, Encoding.UTF8, "application/json"); HttpResponseMessage response = await client.PostAsync(apiUrl, content).ConfigureAwait(false); if (response.StatusCode == HttpStatusCode.OK) { ・・・・処理 } else { ・・・・処理 } } catch (HttpRequestException ex) { // HTTPアクセスエラー return ":HTTPアクセスエラー!"; } catch (TaskCanceledException ex) { // ネットワーク切断エラー return ":ネットワーク切断エラー!"; } catch (System.Exception ex) { return ":例外エラー"; } return ""; }
補足情報(FW/ツールのバージョンなど)
C# UWP
VS2017
HttpClient → System.Net.Http, Version=4.2.1.1
あなたの回答
tips
プレビュー