gpt4 book ai didi

c# - 使方法本身异步

转载 作者:太空狗 更新时间:2023-10-29 23:43:54 24 4
gpt4 key购买 nike

我有这样的方法:

public  List<List<string>>  GroupedNodes(string URL, params string[] XPathes)
{
//Load HTML Source
HtmlWeb loader = new HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = loader.Load(URL);

//some other codes ...

//Return result as a List of list
return grouped;
}

我使用 HtmlAgilityPack 从 url 获取 html 源。

但是当我使用这种方法时它会导致程序卡住

我知道在 UI 中调用此方法时我可以使用多线程但是我想以一种本身是异步和响应的方式编写我的方法,并且当我们使用它,它可以在不卡住的情况下工作。

我的意思是如果有人使用我的方法并且他/她不知道多线程,我希望他/她的程序不会卡住,换句话说,我不想用线程或任务调用我的方法!

最佳答案

通常,正确的方法是使用您正在使用的 IO 方法的等效 async(例如 Load())。但是 HtmlAgilityPack 似乎不支持异步(至少在其 .Net 4.5 版本中不支持)。

这意味着最好的选择是在另一个线程上运行您的方法并要求调用者使用async-await:

例如,实现可能如下所示:

private List<List<string>> GroupedNodes(string URL, params string[] XPathes)
{
//Load HTML Source
HtmlWeb loader = new HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = loader.Load(URL);

//some other codes ...

//Return result as a List of list
return grouped;
}

public Task<List<List<string>>> GroupedNodesAsync(string URL, params string[] XPathes)
{
return Task.Run(() => GroupedNodes(URL, XPathes));
}

如果不使用async-await,就没有好的方法可以让您的方法不阻塞调用线程。

关于c# - 使方法本身异步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39315060/

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