мы разрабатываем приложение, которое подключается к серверу. У нас есть метод, который в основном просто пингует сервер, чтобы проверить, есть ли активное интернет-соединение
Когда нет соединения (то есть устройство не подключено к глобальной сети, но адаптер глобальной сети не отключен), все работает нормально.
Я заметил, что графический интерфейс пользователя зависнет, как только я отключу сетевой адаптер. Время ожидания в 2 секунды также игнорируется - почему?
Я приложил свой код (упрощенный пример, но проблему можно воспроизвести, отключив сетевой адаптер):
namespace HttpUtilities
{
public static class HttpRestClient
{
public static async Task<HttpStatusCode> TestProxy()
{
string uniqueId = Guid.NewGuid().ToString();
HttpClientHandler httpClientHandler = new HttpClientHandler
{
PreAuthenticate = true,
Proxy = WebRequest.DefaultWebProxy,
UseDefaultCredentials = true,
Credentials = CredentialCache.DefaultNetworkCredentials
};
try
{
using (HttpClient client = new HttpClient(httpClientHandler) { Timeout = TimeSpan.FromSeconds(2) })
{
HttpResponseMessage response = await client.GetAsync(new Uri("https://www.google.com"), new CancellationToken());
if (response != null)
{
return response.StatusCode;
}
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message);
}
return HttpStatusCode.BadRequest;
}
}
}
private async void button1_Click(object sender, EventArgs e)
{
HttpStatusCode code = await HttpRestClient.TestProxy();
System.Diagnostics.Debug.WriteLine(code);
}
Что мне здесь не хватает? Я пытался вызвать этот код в отдельной Задаче, но это привело к другим проблемам. Я подумал, что здесь достаточно ключевых слов async / await.