【发布时间】:2018-05-22 20:22:08
【问题描述】:
我将HtmlAgilityPack 与Parallel.Invoke 一起使用,特别是我有一个名为Table 的类,其中包含此实现:
public class Table
{
HtmlDocument doc = new HtmlDocument();
public void Foo1()
{
doc.LoadHtml("some html");
}
public void Foo2()
{
doc.LoadHtml("some html");
}
public void Foo3()
{
doc.LoadHtml("some html");
}
}
现在的问题是,如果我这样做:
Table table = new Table();
Parallel.Invoke(
() => table.Foo1(),
() => table.Foo2(),
() => table.Foo3());
我会得到:
意外错误
来自 HtmlAgilityPack 的异常,特别是在第三种方法上。我可以看到同时该对象被其他两种方法使用(当然,我使用的是Parallel)。
如果我在没有Parallel 的情况下调用该方法都可以正常工作,我该如何处理这个问题?
堆栈跟踪:
at HtmlAgilityPack.HtmlNodeCollection.Append(HtmlNode node) in C:\Users\Jonathan\Desktop\Z\zzzproject\HtmlAgilityPack\HtmlAgilityPack.Shared\HtmlNodeCollection.cs:line 321
at HtmlAgilityPack.HtmlNode.AppendChild(HtmlNode newChild) in C:\Users\Jonathan\Desktop\Z\zzzproject\HtmlAgilityPack\HtmlAgilityPack.Shared\HtmlNode.cs:line 818
at HtmlAgilityPack.HtmlDocument.PushNodeEnd(Int32 index, Boolean close) in C:\Users\Jonathan\Desktop\Z\zzzproject\HtmlAgilityPack\HtmlAgilityPack.Shared\HtmlDocument.cs:line 1882
at HtmlAgilityPack.HtmlDocument.Parse() in C:\Users\Jonathan\Desktop\Z\zzzproject\HtmlAgilityPack\HtmlAgilityPack.Shared\HtmlDocument.cs:line 1424
at HtmlAgilityPack.HtmlDocument.Load(TextReader reader) in C:\Users\Jonathan\Desktop\Z\zzzproject\HtmlAgilityPack\HtmlAgilityPack.Shared\HtmlDocument.cs:line 706
at HtmlAgilityPack.HtmlDocument.LoadHtml(String html) in C:\Users\Jonathan\Desktop\Z\zzzproject\HtmlAgilityPack\HtmlAgilityPack.Shared\HtmlDocument.cs:line 752
at SWP.Controllers.TableController.GetAttendanceTable(Int32 seasonId, Int32 competitionId, Int32 roundId, Int32 groupId)
【问题讨论】:
-
堆栈跟踪会更有帮助。
-
@Aybe 添加,检查
-
看看这个 GitHub 搜索,它会给你一个提示:github.com/zzzprojects/html-agility-pack/…
-
您预计会发生什么?你试图使用的对象不能像那样并行使用,所以你不能做你想做的事。我们需要更多地了解您为什么要这样做,以便更好地回答该怎么做。
标签: c# .net multithreading html-agility-pack