使用 AngleSharp 进行异步解析

Async parsing with AngleSharp

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

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);

没有任何事情等待您的异步方法完成,因此程序退出。您可以通过修改为使用异步主方法来解决此问题:

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

或者,如果您使用的版本早于 C# 7.1(不支持 async main):

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

您还需要将 Test 的 return 类型更改为 async Task:

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

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