c# - 我的控制台应用程序以代码 0 退出的原因是什么?

标签 c# .net-core command-line

我试图通过其 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

我认为这不是代码问题,也许是我的 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();

有什么想法吗?

最佳答案

这里有几个问题

1) 当您调用 GetHtmlAsync() 时,您并没有等待它,这意味着您的应用程序继续运行它之后的代码(其中没有),导致应用程序退出

2) 你应该 avoid 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

关于c# - 我的控制台应用程序以代码 0 退出的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60569200/

相关文章:

c# - 如何从组框中获取选中哪个单选按钮?

c# - DataBinder.Eval 数据项为空

c# - .NET Core 有 Rx.NET 吗?

.net-core - 跳过 csv 文件中的行

c++ - 两个 Windows 应用程序可以使用命令行进行通信吗?

php - 使用 PHP 运行命令行命令

c# - 为什么 VB 中的 lambda 表达式与 C# 中的不同?

c# - 下拉列表值的 request.form

c# - 如何在 Winforms 中为长加载表单显示 "Loading . . . please wait"消息?

python - 命令行 - int() 参数必须是字符串、类似字节的对象或数字,而不是 'list'