使用 AngleSharp 进行异步解析

Async parsing with AngleSharp

提问人:Stealthguy 提问时间:4/4/2022 最后编辑:Theodor ZouliasStealthguy 更新时间:4/4/2022 访问量:363

问:

所以我想从网站解析一些数据,我找到了一个教程,这是代码:

public static async void Test()
{
    var config = Configuration.Default.WithDefaultLoader();
    using var context = BrowsingContext.New(config);

    var url = "http://webcode.me";

    using var doc = await context.OpenAsync(url);
    // var title = doc.QuerySelector("title").InnerHtml;
    var title = doc.Title;

    Console.WriteLine(title);

    var pars = doc.QuerySelectorAll("p");

    foreach (var par in pars)
    {
        Console.WriteLine(par.Text().Trim());
    }
}

static void Main(string[] args)
{
    Test();
}

程序在到达以下位置后立即退出:

using var doc = await context.OpenAsync(url);
C# async-await 控制台-应用程序 html-解析 Anglesharp

评论


答:

5赞 Charles Mager 4/4/2022 #1

没有任何东西在等待异步方法完成,因此程序会退出。您可以通过修改为使用异步 main 方法来修复此问题:

static Task Main(string[] args)
{
    return Test();
}

或者,如果您使用的是早于 C# 7.1 的版本(不支持异步主版本):

static void Main(string[] args)
{
    Test().GetAwaiter().GetResult();
}

您还需要将 return type 更改为 :Testasync Task

public static async Task Test()
{
    // ...
}

你可能会发现 async main 上的 C# 7.1 文档很有帮助。