2017-07-20 10 views
0

生産中のXamarin.Formsアプリケーションがあります。テスト段階では、このような問題は発生しませんでした。しかし、Azure Mobile Centerでは、いくつかのクラッシュ問題が発生しています。例えば、1つのクラッシュの問題は、以下のように見えるXamarin.Forms System.Threading.Tasks.TaskCanceledException

タイトルセクション、それが示す年代に
A task was canceled. 

1 TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) 
2 TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) 
3 TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) 
4 TaskAwaiter`1[TResult].GetResult() 
5 HttpClientHandler+<SendAsync>d__63.MoveNext() 
6 ExceptionDispatchInfo.Throw() 
... 
17 RequestBuilderImplementation+<buildCancellableTaskFuncForMethod>c__AnonStoreyA`1+<buildCancellableTaskFuncForMethod>c__async9[T].MoveNext() 
18 ExceptionDispatchInfo.Throw() 
23 APIClient+<Portfolio>d__6.MoveNext() 
24 ExceptionDispatchInfo.Throw() 
29 PortfolioPage+<LoadPortfolio>d__3.MoveNext() 
30 ExceptionDispatchInfo.Throw() 

System.Threading.Tasks.TaskCanceledException

私はPortfolioPageというページとLoadPortfolioという名前のメソッドを持っています。方法は、

async void LoadPortfolio() 
{ 
    try 
    { 
     APIResponse.Portfolio portfolio = await new APIClient().Portfolio(selectedDate); 
     MessagingCenter.Send<PortfolioPage, APIResponse.Portfolio>(this, "LoadedPortfolio", portfolio); 
    } 
    catch (ApiException e) 
    { 
     Debug.WriteLine(e.Message); 
     if (e.StatusCode == System.Net.HttpStatusCode.Unauthorized) UIUtil.gotoAuthenticate(this); 
     else 
      MessagingCenter.Send<PortfolioPage, APIResponse.Portfolio>(this, "LoadedPortfolio", null); 
    } 
} 

私はXamarinとC#の新機能です。このエラーログから情報を抽出する方法と、TaskCanceledExceptionの問題を解決する方法が不明です。どんな助けもありがとうございます。

ありがとうございます。

+0

リクエストが長時間になり、モバイルサービスがタイムアウトすると、これが表示されます。たとえば、テスト用にデータベースを最初から再構築し、初期化が完了する前にデータベースにクエリを実行するように設定している場合は、よく表示されます。 –

答えて

2

'HttpClientHandler'関数は、System.Threading.Tasks;ライブラリの[タスク]と同様に機能します。これは、取り消し要求を受け取ったとき、または「期待された」理由で応答が失敗したときに例外をスローすることを意味します。

私はtry/catchブロックでリクエストをラップし、 'ThrowForNonSuccess'例外をどのように扱いたいかを理解することをお勧めします。