0

Я использую этот код, чтобы сделать запрос асинхронного с маркером отмены:Ошибка: Операция была отменена

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

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

Но, когда операция отменена, cancellationToken.ThrowIfCancellationRequested(); бросает исключение. Я знаю, что эта линия должна быть такой. Но в среде разработки исключение вызывает визуальную студию. Как я могу избежать этого?

+0

Вы имеете в виду под «visual studio to break», что 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) также может выбросить исключение отмены, так что вам нужно обернуть этот вызов (или где его содержащий метод ждало) с пытаясь угадать поймать.

Смежные вопросы