Xamarin.Forms System.Threading.Tasks.TaskCanceledException

时间:2017-07-20 14:57:09

标签: c# multithreading azure xamarin.forms

我们在生产中有一个Xamarin.Forms应用程序。在我们的测试阶段,我们没有遇到过这样的问题。但是,在Azure Mobile Center中,我们遇到了许多崩溃问题。例如,一个崩溃问题如下所示,

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问题。任何帮助表示赞赏。

提前致谢。

1 个答案:

答案 0 :(得分:2)

&#39; HttpClientHandler&#39;功能与System.Threading.Tasks;库中的任务类似。这意味着当它收到取消请求时,它会抛出一个异常,或者对某些预期的响应是不成功的&#39;原因。

我建议将请求包装在try / catch块中,并弄清楚你希望如何处理ThrowForNonSuccess&#39;异常。