Не отлавливает 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("...");
→ Ссылка