今Xamarin.iOSで作成中のアプリのある画面で数秒おきにWeb APIにポーリングをしているのですが、その画面を開いているときにホームボタンを押してアプリを後ろに回しSafariやメールなどを開いて操作した後先ほどのアプリをフォアグラウンドに戻すと、ConnectFailure(the descriptor is not a socket)のWebExceptionが出ることがあります。
APIの呼び出しはHttpClient.SendAsyncで戻り値のTaskのContinueWithで継続して処理するようにしています。
伺いたいのはこのようなバックグラウンドからフォアグラウンドに移る際のHttpClientを使ったリクエストでこのようなエラーを出さない作法があるのか、または出るのは避けられないならばその適切な判定方法です。
通常のリクエスト際にエラーが出た場合にはアラートで"何か失敗しました。繰り返されるときは~"と一般的なメッセージを出したいのですが、フォアグラウンドに戻す際に一時的に出るような現象であればアラートを出さず処理をやり直したいと考えています。
例えば
Resilient network services with mobile Xamarin appsにあるようなModernHttpClientを使うとその辺をよしなにしてくれるとか、AppDelegateのWillEnterForeground後数秒はそちらにあるConnectivityや何かしらの手段で接続可否を調べてから通信を行うとか同様のエラーは握りつぶしてリトライするとかなど。
うまい方法が見つからなければWillEnterForeground後数秒は握りつぶしてリトライしようかと思っていますが、あまりよろしくはないのでもっとエレガントな方法やそもそもエラーを抑制する方法、またはエラーが起きた際にこれはフォアグラウンド復帰がらみのものだと判定できる適切な方法などがあればお伺いしたいです。
よろしくお願いします。
あなたの回答
tips
プレビュー