gpt4 book ai didi

c# - 如何在没有 AsyncEx 库的情况下调用 anglesharp 异步方法?

转载 作者:行者123 更新时间:2023-11-30 18:22:07 25 4
gpt4 key购买 nike

AngleSharp ,加载 HTML 页面并等待所有样式表下载(如果需要)并且所有脚本都准备好执行解析器,我这样做

    public sealed class WebReader
{
private IDocument _ashDocument;

public async Task Load(string Url)
{
var config = Configuration.Default.WithDefaultLoader().WithJavaScript().WithCss();
var context = BrowsingContext.New(config);
_ashDocument = await context.OpenAsync(Url);
}

public IEnumerable<string> getImage()
{
return _ashDocument.QuerySelectorAll("img").Select(n => n.Attributes["src"].Value);
}
}

static void Main(string[] args)
{
WebReader wReader = new WebReader();
AsyncContext.Run((Action)(async () =>
{
await wReader.Load("http://blogs.msdn.com/b/dotnet/");
}));
IEnumerable<string> imageUrls = wReader.getImage();
foreach (string url in imageUrls)
{
Console.WriteLine(url);
}

Console.ReadKey();
}

AsyncContext 是 AsyncEx 的一部分图书馆。

是否可以在没有 AsyncEx 库的情况下做同样的事情?

最佳答案

Is it possible to do the same thing without AsyncEx library?

不在控制台应用程序中。 AsyncContext 的全部要点是允许您等待 Main 中的方法,它本身不是异步的(也不可能)。唯一的选择是阻止任务。此外,正如@StephanCleary 指出的那样,上下文中的延续将在单个线程上恢复,而不是任意线程池线程。

没有它,它只会是:

static void Main(string[] args)
{
WebReader wReader = new WebReader();
wReader.Load("http://blogs.msdn.com/b/dotnet/")).Wait();
IEnumerable<string> imageUrls = wReader.getImage();
foreach (string url in imageUrls)
{
Console.WriteLine(url);
}
}

在极少数情况下,使用 Task.Wait 阻塞是可以的,这就是其中之一。

旁注 - 异步方法应标有 Async 后缀,因此您应该使用 LoadAsync。此外,.NET 方法命名约定是 Pascal 大小写,而不是驼峰大小写。

关于c# - 如何在没有 AsyncEx 库的情况下调用 anglesharp 异步方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34357913/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com