Отмена HTTP-запроса в C#
Источник CancellationTokenSource выдаёт
токен. Его отменяют по таймеру или вручную. Если
отмена наступила до конца запроса, вызов
GetAsync бросает
OperationCanceledException. Это не ошибка
HTTP на сервере.
Если токен отменён заранее, запрос не стартует:
using HttpClient client = new();
using CancellationTokenSource cts = new();
cts.Cancel();
try
{
await client.GetAsync("https://example.com/", cts.Token);
}
catch (OperationCanceledException)
{
Console.WriteLine("canceled");
}
Срок можно задать прямо в конструкторе CancellationTokenSource(TimeSpan): это клиентский предел ожидания. На медленной сети запрос оборвётся, на быстрой исключения не будет:
using HttpClient client = new();
using CancellationTokenSource cts = new(TimeSpan.FromSeconds(30));
using HttpResponseMessage response = await client.GetAsync("https://example.com/", cts.Token);
Console.WriteLine(response.IsSuccessStatusCode);
Запросите "https://httpbin.org/delay/2" с
токеном, отменённым до отправки. В обработчике
отмены выведите "stopped".