gpt4 book ai didi

c# - 从多个线程填充列表

转载 作者:行者123 更新时间:2023-11-30 16:06:09 26 4
gpt4 key购买 nike

我有一个程序使用 HtmlAgilityPack 屏幕抓取少量页面,我希望它运行得更快,因为页面加载有时需要 1-2 秒。现在我有以下代码可以按顺序执行。

  List<Projections> projectionsList = new List<Projections>();       
for (int i = 532; i <= 548; i++)
{
doc = webGet.Load("http://myurl.com/projections.php?League=&Position=97&Segment=" + i + "&uid=4");
GetProjection(doc, ref projectionsList, (i));
}

基本上我想将循环内的代码分解为多个线程并等待所有线程完成后再执行。我希望列表在完成后被填充。我意识到列表不是线程安全的,但我有点想弄清楚如何解决这个问题。

最佳答案

我建议您使用 Parallel.For 作为@Tgys 的示例,但您可以使用 ConcurrentBag集合,它是线程安全的,您不需要处理锁。

ConcurrentBag<Projections> projectionsList = new ConcurrentBag<Projections>();       
Parallel.For(532, 548 + 1, i => {
var doc = webGet.Load("http://myurl.com/projections.php?League=&Position=97&Segment=" + i + "&uid=4");
GetProjection(doc, ref projectionsList, (i));
}
});

您可能需要更改 GetProjection 方法。因此,请检查我的解决方案是否符合您的需求。

查看此 link有关 ConcurrentBag 类的更多信息。

关于c# - 从多个线程填充列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32673650/

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