Ошибка: операция отменена

Я использую этот фрагмент кода для выполнения асинхронного запроса с токеном отмены:

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

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

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


person agent47    schedule 13.06.2013    source источник
comment
Вы имеете в виду визуальную студию в перерыве, когда VS останавливается и показывает диалоговое окно исключения? Разработка или время выполнения, если вы не обрабатываете исключение, это приведет к сбою вашего приложения. Вам нужно поймать и обработать исключение, чтобы избежать этого.   -  person G. Stoynev    schedule 13.06.2013
comment
@ G.Stoynev Да, VS останавливается и показывает диалоговое окно исключения. Итак, где я могу обработать исключение? В основном потоке или асинхронном?   -  person agent47    schedule 13.06.2013


Ответы (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) может также генерировать исключение отмены, поэтому вам нужно обернуть этот вызов (или там, где ожидается его содержащий метод) с помощью try-catch.

person G. Stoynev    schedule 13.06.2013