Программа завершается раньше времени при отправке GET запроса
Пытался создать HttpClient и сделать запрос, который вернул бы мне статус код. Но на строке
using var result = await client.GetAsync("https://google.com");
просто завершается программа без каких-либо ошибок. Подскажите что не так, или почему так происходит.
Вот мой код:
using System.Net.Sockets;
using System;
using System.Net.Http;
internal class Program
{
static async void HttpTest()
{
Console.WriteLine("Приложение начало работу");
using (var client = new HttpClient())
{
using var result = await client.GetAsync("https://google.com");
Console.WriteLine(result.StatusCode);
}
Console.WriteLine("Приложение завершило работу");
}
static void Main(string[] args)
{
HttpTest();
}
}
Ответы (2 шт):
Не используйте async void
static async Task HttpTest()
{
// ...ваш код
}
static async Task Main(string[] args)
{
await HttpTest();
}
Как верно заметил @EvgeniyZ в комментарии, проблема в том что вы запускаете асинхронную задачу, и не дожидаетесь её завершения.
Так у вас нет ожидания завершения операции. Да, внутри метода HttpTest
вы используете await
для ожидания, но весь метода HttpTest
является асинхронным, по этому так же нужно ожидать его завершения при вызове.
Первый вариант, вы можете поставить в конце Main
команду Console.ReadLine()
для ожидания ввода с клавиатуры. Такой вызов поможет вам дождаться завершения исполнения метода HttpTest
.
Второй вариант это использовать Task
подобным образом:
static void Main(string[] args)
{
Task httpTask = Task.Run(async () => { await HttpTest() });
Task.WaitAll(httpTask)
}
UPD:
Ещё стоит отметить, что у вас сам метод HttpTest
возвращает void
и в этом большая проблема, потому что void
нельзя ожидать. При использовании асинхронных методов рекомендую заменить void
на Task
для контролированного завершения задач