Не отлавливает try catch на обычном Exception
Ссылка:https://guidebrand.ru/mark/bathing-ape
Метод который не ловит ошибку в foreach
Ошибка должна выпасть сразу в foreach т.к document.QuerySelectorAll("ul.contact-list li") = null
public async Task searchLink(string itemLink)
{
string htmlSitelink = await client.GetStringAsync(itemLink);
var document = await context.OpenAsync(req => req.Content(htmlSitelink));
try
{
foreach (var site in document.QuerySelectorAll("ul.contact-list li"))
if (site.TextContent.Contains("Веб-сайт"))
siteLink = site.QuerySelector("a").GetAttribute("href");
}
catch (Exception)
{
Console.WriteLine($"{itemLink}\r\nНету ссылки на сайт");
siteLink = "";
}
}
Ответы (1 шт):
Автор решения: Alexander Petrov
→ Ссылка
Проблема из-за async void. Замените на async Task.
Уберите все .Result. Поставьте await. Вместо одной строки будет несколько.
Ещё лучше переписать метод следующим образом:
public async Task<string> SearchLink(string itemLink)
{
var httpResponseMessage = await client.GetAsync(itemLink);
var htmlSitelink = await httpResponseMessage.Content.ReadAsStringAsync();
var document = await context.OpenAsync(req => req.Content(htmlSitelink));
try
{
foreach (var site in document.QuerySelectorAll("ul.contact-list li"))
{
if (site.TextContent.Contains("Веб-сайт"))
{
return site.QuerySelector("a").GetAttribute("href");
}
}
}
catch (Exception)
{
Console.WriteLine($"{itemLink}\r\nНету ссылки на сайт");
}
return "";
}
Вызываем так:
siteLink = await SearchLink("...");