如何优雅地处理TaskCancelledException而使用搜索框在Windows 8.1

本文关键字:搜索 Windows 何优雅 处理 TaskCancelledException | 更新日期: 2023-09-27 18:10:37

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

后面的代码
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();
如你所见,我只是忽略了它。

有更好的方法来处理这个问题吗?

我无法确定这个问题的根本原因。有人可以指导,如果这是正确的方式来调用一个async方法在searchsuggested requested .

如何优雅地处理TaskCancelledException而使用搜索框在Windows 8.1

你的代码看起来不错。我会显式捕获TaskCanceledException,以确保我不会无意中忽略其他异常。

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