0

我使用此代碼段做一個異步查詢與取消標記:錯誤:該操作被取消

var _client = new HttpClient(/* some setthngs */); 

_client.GetAsync(someUrl, cancellationToken).ContinueWith(gettingTask => { 
    cancellationToken.ThrowIfCancellationRequested(); 
    SomeStuffToDO(); 
    }, TaskScheduler.FromCurrentSynchronizationContext()); 
}, TaskScheduler.FromCurrentSynchronizationContext()); 

但是,當運行被取消,cancellationToken.ThrowIfCancellationRequested();拋出異常。我知道這條線應該用於這個東西。但是,在開發環境中,異常會導致視覺工作室中斷。我怎樣才能避免這種情況?

+0

你的意思是「視覺工作室休息」,VS停止並顯示「例外」對話框?開發或運行時,如果你沒有處理異常,它會導致你的應用程序失敗。你需要捕捉和處理異常,以避免這種情況。 –

+0

@ G.Stoynev是VS停止並顯示「例外」對話框。那麼,我在哪裏可以處理異常?在主線程還是異步? –

回答

1

您需要將拉姆達內處理,就像這樣:

var _client = new HttpClient(/* some setthngs */); 

_client.GetAsync(someUrl, cancellationToken).ContinueWith(gettingTask => { 
    try { 
    cancellationToken.ThrowIfCancellationRequested(); 
    SomeStuffToDO(); 
    } 
    catch (...) { ... } 
    finaly { ... } 
    }, TaskScheduler.FromCurrentSynchronizationContext()); 
}, TaskScheduler.FromCurrentSynchronizationContext()); 

_client.GetAsync(someUrl, cancellationToken)也有可能拋出異常取消,所以你需要來包裝調用(或在其包含方法等待)與試戴抓住。

相關問題