2014-06-26 54 views
3

我正在使用一個搜索框,我將加載一個名稱列表。如何在Windows 8.1中使用SearchBox時優雅地處理TaskCancelledException

我的代碼背後

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

你的代碼對我來說看起來很好。我會明確地捕獲TaskCanceledException,但要確保不會無意中忽略其他異常。

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