[Windows ストアアプリ] HttpClient.PostAsync() をリトライしようとするとエラーが出る

HttpClient で PostAsync() が失敗したときにリトライするコードを書くとリトライ時に以下のエラーが発生します。

Cannot access a disposed object.
Object name: 'System.Net.Http.FormUrlEncodedContent'.
await httpClient.PostAsync(url, httpContent);
await httpClient.PostAsync(url, httpContent);// 2回目はエラーになる

PostAsync() の中で HttpContent (※) が Dispose されているようなので
文字列 (str) として保持して httpClient.PostAsync(url, new StringContent(str)) とするのが良さそうです。
※ FormUrlEncodedContet や MultipartFormDataContent など

その他の方法やサンプルコードは参考サイト参照。

【参考】
Retrying HttpClient Unsuccessful Requests (英語)
Await HttpClient and do-while loop (英語)
Object is disposed after PostAsync with HttpClient (英語)


カテゴリー: Windows ストア アプリ タグ: , パーマリンク