Как определить, использовался ли HttpClient.CancelPendingRequests для отмены ожидающих запросов?

Настройка приложения


  1. Я использую HttpClient для выполнения нескольких асинхронных запросов POST к службе REST из приложения Windows Forms.
  2. В то время как ответ получен от службы REST, приложение показывает окно Обработка... с кнопкой Отмена.
  3. Теперь, когда пользователь нажимает кнопку Отмена, я использую HttpClient.CancelPendingRequests для отмены текущих запросов.
  4. Используя HttpClient. CancelPendingRequests выдает TaskCanceledException в PostAsync способ вызова.

Запрос

  1. Есть ли способ обнаружить, что TaskCanceledException возникло из-за вызова HttpClient.CancelPendingRequests, а не по какой-либо другой причине (например, тайм-аут)
  2. Есть ли другой подход для достижения аналогичной функциональности отмены?

Спасибо



person Rahul    schedule 29.01.2016    source источник


Ответы (1)


Перехватите исключение и проверьте свойство TaskCanceledException.CancellationToken.IsCancellationRequested. Если это правда, вы можете быть уверены, что это была явно запрошенная отмена, а не тайм-аут.

Сказав это, будьте осторожны с этим решением и проведите некоторое тестирование. Как я обнаружил некоторое время назад, есть случаи, когда вы подумал бы, что бит должен быть установлен, но это не так.

person Todd Menier    schedule 30.01.2016
comment
Я не верю, что это правильно. CancellationToken.IsCancellationRequested просто смотрит на CancellationTokenSource.IsCancellationRequested. - person Ben Randall; 25.02.2016