Таймаут запроса в C#
Предел HttpClient.Timeout ограничивает весь
обмен, включая чтение тела. Если время вышло,
вызов бросает TaskCanceledException.
Отдельной фразы "timeout" в этом
исключении часто нет.
Щедрого предела на быстром хосте обычно хватает, текст ответа длиннее 100 символов:
using HttpClient client = new();
client.Timeout = TimeSpan.FromSeconds(30);
string text = await client.GetStringAsync("https://example.com/");
Console.WriteLine(text.Length > 100);
Адрес с искусственной паузой и короткий Timeout
чаще обрывают ожидание. Если сервер ответил
быстрее предела, исключения не будет:
using HttpClient client = new();
client.Timeout = TimeSpan.FromSeconds(2);
try
{
await client.GetStringAsync("https://httpbin.org/delay/5");
}
catch (TaskCanceledException)
{
Console.WriteLine("timeout");
}
Для адреса "https://httpbin.org/delay/4"
сравните пределы 10 секунд и 1 секунда.
Для каждой попытки выведите "done", если
ответ получен, и "late", если ожидание
оборвалось. Каждое слово - с новой строки.