Код парсера доступен
try
{
id_source = await ParsingAll(0, "#adv_id", "");
foto_path = await ParsingAll(1, "img[id='print_user_photo']", "src");
position = await ParsingAll(0, "div.title.adv-title.newTitle > h1", "");
catch (Exception ex)
{
Error?.Invoke(id_source + "- Error - ");
}
Как сделать, если в строке «foto_path» возникла ошибка, то после обработки ошибки try / catch программа продолжила работу и начала выполнять строку «позиция»?





Один из способов - добавить trycatch в ваш метод ParseAll:
ParsingAll()
{
try
{
}
catch(Exception e)
{
}
}
и вы можете вызвать им как обычно:
id_source = await ParsingAll(0, "#adv_id", "");
foto_path = await ParsingAll(1, "img[id='print_user_photo']", "src");
position = await ParsingAll(0, "div.title.adv-title.newTitle > h1", "");
и вернуть некоторый статус с результатом, чтобы сказать, было ли оно успешным или нет.
Или вам нужно будет обернуть его отдельно каждого из них, чтобы следующие операторы выполнялись в случае сбоя одного из них:
try
{
foto_path = await ParsingAll(1, "img[id='print_user_photo']", "src");
}
catch(Exception e)
{
}
position = await ParsingAll(0, "div.title.adv-title.newTitle > h1", "");
Но все зависит от требований программы, как пойдет поток.
Единственный способ сделать это - разбить строки на отдельные предложения try...catch:
try
{
id_source = await ParsingAll(0, "#adv_id", "");
catch (Exception ex)
{
Error?.Invoke(id_source + "- Error - ");
}
try
{
foto_path = await ParsingAll(1, "img[id='print_user_photo']", "src");
catch (Exception ex)
{
Error?.Invoke(id_source + "- Error - ");
}
…
Вы можете просто сузить блок try-catch:
Код парсера доступен
// May need its own try-catch blcok
id_source = await ParsingAll(0, "#adv_id", "");
try
{
foto_path = await ParsingAll(1, "img[id='print_user_photo']", "src");
catch (Exception ex)
{
Error?.Invoke(id_source + "- Error - ");
}
// May need its own try-catch blcok
position = await ParsingAll(0, "div.title.adv-title.newTitle > h1", "");
Получить значение foto_path из подпрограммы, чем попытаться поймать Или поместите try catch в процедуру ParsingAll.
Вы можете подумать о том, чтобы перехватить ошибку в методе async ParsingAll и вернуть только действительные выходные данные этого метода.
Как насчет использования блока finally, который всегда будет выполняться независимо от возникновения исключения. Я считаю, что это скорее обходной путь, но лучшим решением должно быть решение в методе ParsingAll () для вашей ситуации.
try
{
id_source = await ParsingAll(0, "#adv_id", "");
foto_path = await ParsingAll(1, "img[id='print_user_photo']", "src");
}
catch (Exception ex)
{
Error?.Invoke(id_source + "- Error - ");
}
finally
{
position = await ParsingAll(0, "div.title.adv-title.newTitle > h1", "");
}
Решение зависит от того, можно ли, зная ваши требования к архитектуре, добавить try catch внутри метода ParsingAll. Если да, то это простое и эффективное решение.