Блокируется форма, при использовании HttpClient'а в async методе
Использую async метод, чтобы получить html со страницы, но форма блокируется:
public partial class Test : Form
{
HttpClient httpClient = new HttpClient();
public async Task<string> GetSource(string url)
{
using (HttpResponseMessage result = await httpClient.GetAsync(url, HttpCompletionOption.ResponseHeadersRead).ConfigureAwait(false))
{
result.EnsureSuccessStatusCode();
return await result.Content.ReadAsStringAsync();
}
}
private async Task GetSourcePage()
{
string s = await GetSource("ссылка");
}
private async void StartButtonClick(object sender, EventArgs e)
{
try
{
await GetSourcePage();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
В чём может быть проблема?
Ответы (2 шт):
Автор решения: CrazyElf
→ Ссылка
Используйте асинхронный вариант обработки события:
async void StartButtonClick(object sender, EventArgs e)
{
await GetSourcePage();
}
Автор решения: Aimon Z.
→ Ссылка
https://stackoverflow.com/questions/56029988/sendasync-is-blocking-ui-thread
GetAsync использует метод SendAsync
К сожалению, по историческим причинам SendAsync не является чисто асинхронным. В частности, он синхронно выполняет поиск DNS и разрешение прокси. Итак, чтобы сделать это полностью неблокирующим, вам нужно будет обернуть этот вызов в Task.Run