Я пытаюсь реализовать что-то, что будет действовать как команда Ping CMD в том смысле, что она отправит запрос серверу, ожидает в течение определенного периода времени, и они объявляют пакет этого запроса как потерянный, запрос был завершается за разумное время до того, как я установил свойство Timeout объекта HttpClient, но после выполнения запроса время истекло (до установки свойства Timeout используется около 1000 мс для получения данных с сервера).
Кто-нибудь имел бы представление о том, почему это происходит?
public class TestPacketLoss
{
private HttpClient _client;
public TestPacketLoss()
{
_client = new HttpClient();
_client.BaseAddress = new Uri("https://localhost:5001/api/");
_client.Timeout = new TimeSpan(0, 0, 0, 0, 1500);
}
public async Task Start()
{
Stopwatch sw = new Stopwatch();
long milliseconds = 0;
int packetsLost = 0;
for (int i = 0; i < 60; i++)
{
sw.Restart();
HttpResponseMessage response;
try
{
response = await _client.GetAsync("Temprature/");
if (response.StatusCode == System.Net.HttpStatusCode.OK)
{
Console.WriteLine($"Request received in {sw.ElapsedMilliseconds} ms");
milliseconds += sw.ElapsedMilliseconds;
}
else
{
packetsLost++;
}
}
catch (Exception ex)
{
Console.WriteLine($"Failed in {sw.ElapsedMilliseconds}");
packetsLost++;
}
}
Console.WriteLine($"Received 60 messages in avarage of {milliseconds / 60} ms");
Console.WriteLine($"Number of packets lost {packetsLost}");
}
}
Обновление
быстрое обновление с использованием отладчика. Я на самом деле обнаружил, что время между запросом и ошибкой меньше времени ожидания, что говорит о том, что что-то не так с тем, как HttpClient вычисляет время ожидания