что является причиной выхода моего консольного приложения с кодом 0? - PullRequest
2 голосов
/ 06 марта 2020

Я пытаюсь вызвать сайт через его URL для создания веб-мастера, но когда я пытаюсь получить элементы из ожидаемого URL, мое приложение останавливается и выдает следующее сообщение:

blablah.exe (process 1512) exited with code 0.
To automatically close the console when debugging stops, enable Tools->Options->Debugging->Automatically close the console when debugging stop

I Не думаю, что это проблема кода, возможно, что-то с моим отладчиком Visual Studio? потому что я не могу понять, что это такое.

Это приложение net для командной строки ядра

Какой-то код на всякий случай

    static void Main(string[] args)
    {
        GetHtmlAsync();

    }

    private static async void GetHtmlAsync()
    {
        var url = "https://blahblah.com";

        var client = new HttpClient();
        var html = await client.GetStringAsync(url);

        var htmlDoc = new HtmlDocument();
        htmlDoc.LoadHtml(html);


        var newsList = htmlDoc.DocumentNode.Descendants("table")
            .Where(node => node.GetAttributeValue("class","")
            .Equals("itemList")).ToList();


        Console.WriteLine(newsList);


        Console.Read();


    }
}

при отладке он даже не достигает:

var htmlDoc = new HtmlDocument();

есть идеи?

Ответы [ 2 ]

3 голосов
/ 06 марта 2020

Здесь есть пара проблем

1) Когда вы звоните GetHtmlAsync(), вы не ожидаете его, то есть ваше приложение продолжает выполнять код после него (которого нет), что приводит к выход из приложения

2) Вам следует избегать async void за исключением обработчиков событий, вместо этого возвращать async Task

Измененный код может выглядеть следующим образом

static async Task Main(string[] args)
{
    await GetHtmlAsync();
}

private static async Task GetHtmlAsync()
{
  //Do stuff
}

Обратите внимание, что для использования async Task Main необходимо использовать как минимум C# 7.1

0 голосов
/ 06 марта 2020

Причина, по которой он возвращает 0 (ноль), успех, в том, что он завершился без ошибки.

Измените метод на:

private static async Task GetHtmlAsync()

И вызовите его например:

GetHtmlAsync().Wait();

Метод будет работать синхронно, но приложение все равно будет работать, как написано.

...