C# 无法将HtmlAlityPack与多线程一起使用

C# 无法将HtmlAlityPack与多线程一起使用,c#,.net,multithreading,html-agility-pack,C#,.net,Multithreading,Html Agility Pack,我将HtmlAgilityPack与Parallel.Invoke一起使用,特别是我有一个名为Table的类,其中包含以下实现: public class Table { HtmlDocument doc = new HtmlDocument(); public void Foo1() { doc.LoadHtml("some html"); } public void Foo2() { doc.LoadHtml("some

我将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的异常,特别是在第三个方法上。我可以看到,同时这个对象被另外两种方法使用,当然,我使用的是并行

如果我调用的方法没有并行所有工作良好,我如何处理这个问题

堆栈跟踪:

在C:\Users\Jonathan\Desktop\Z\zzzproject\HtmlAgilityPack\htmlgilitypack.Shared\HtmlNodeCollection.cs中的HtmlAgilityPack.HtmlNodeCollection.AppendHtmlNode节点处:第321行 在C:\Users\Jonathan\Desktop\Z\zzzproject\HtmlAgilityPack\HtmlAgilityPack.Shared\HtmlNode.cs中的HtmlAgilityPack.HtmlNode.AppendChildHtmlNode newChild处:第818行 在HtmlAgilityPack.HtmlDocument.PushNodeEndInt32索引中,在C:\Users\Jonathan\Desktop\Z\zzzproject\HtmlAgilityPack\HtmlAgilityPack.Shared\HtmlDocument.cs中使用布尔关闭:第1882行 在C:\Users\Jonathan\Desktop\Z\zzzproject\HtmlAgilityPack\HtmlAgilityPack.Shared\HtmlDocument.cs中的HtmlAgilityPack.HtmlDocument.Parse处:第1424行 在C:\Users\Jonathan\Desktop\Z\zzzproject\HtmlAgilityPack\htmlgilitypack.Shared\HtmlDocument.cs中的HtmlAgilityPack.HtmlDocument.LoadTextReader中:第706行 在HtmlAgilityPack.HtmlDocument.LoadHtmlString html中,C:\Users\Jonathan\Desktop\Z\zzzproject\HtmlAgilityPack\HtmlAgilityPack.Shared\HtmlDocument.cs:第752行
在SWP.Controllers.TableController.GetAttendanceTableInt32季节ID、Int32 competitionId、Int32 roundId、Int32 groupId中,您试图异步加载html到同一个HtmlDocument对象,几乎没有库准备好处理非静态类的异步修改,这就是为什么在某些方面存在锁定。我猜,每次将HTML加载到对象时,它都会重新启动HTML节点的树节点数据结构,从而使一切都变得一团糟


如果要异步解析/读取HtmlDocument对象,则这是一回事,但您正在主动写入HtmlDocument对象,这意味着无序程序执行可以将对象属性设置为null,同时尝试遍历该属性。

堆栈跟踪会更有帮助。@Aybe添加,检查看看这个GitHub搜索,它会给你一个关于发生了什么的提示:你期望发生什么?您尝试使用的对象无法像那样并行使用,因此您无法执行您想要的操作。我们需要更多地了解您为什么尝试这样做,以便更好地回答您应该做什么。