如何在Windows 8.1中使用搜索框时优雅地处理TaskCanceledException

时间:2014-06-26 19:02:25

标签: c# winrt-xaml windows-8.1 winrt-async win-universal-app

我正在使用一个搜索框,我将加载一个名单列表。

我的代码

private async void SearchBox_SuggestionsRequested(SearchBox sender, SearchBoxSuggestionsRequestedEventArgs args)
    {
        if (string.IsNullOrEmpty(args.QueryText))
        {
            return;
        }
        var collection = args.Request.SearchSuggestionCollection;
        if(oldquery != args.QueryText && args.Request.IsCanceled == false)
        {
            var deferral = args.Request.GetDeferral();
            try
            {
                oldquery = args.QueryText;

                var listOfBanks = await addFIPageViewModel.GetBanksOnQuery();

                foreach (Institution eachBank in listOfBanks)
                {
                    collection.AppendQuerySuggestion(eachBank.Name);
                }
            }

            //JUST Logging and ignoring. Can I handle it in a better way
            catch(Exception e)
            {
                Debug.WriteLine(e.StackTrace);
            }
            finally
            {
                deferral.Complete();
            }

        }
    }

类型'System.Threading.Tasks.TaskCanceledException'的异常 任务被取消了。正在出现

var listOfBanks = await addFIPageViewModel.GetBanksOnQuery();

我忽略了你所看到的。

有没有更好的方法来解决这个问题?

我无法确定此问题的根本原因。如果这是在SearchSuggestionRequested中调用异步方法的正确方法,有人可以指导。

1 个答案:

答案 0 :(得分:1)

您的代码对我来说很好。我明确地捕获了TaskCanceledException,但确保我不会无意中忽略其他异常。

try
{
    // like above 
}
catch(TaskCanceledException e)
{
    Debug.WriteLine("Task cancelled: " + e.Message);
}
finally
{
    deferral.Complete();
}