使用 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 文档很有帮助。
所以我想从网站上解析一些数据,我找到了一个教程,代码如下:
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 文档很有帮助。