gpt4 book ai didi

c# - "Any public static members of XmlDocument are thread safe. Any instance members are not guaranteed to be thread safe": yes, 但

转载 作者:太空宇宙 更新时间:2023-11-03 22:58:13 27 4
gpt4 key购买 nike

我在 XmlDocument class documentation 中看到在 MSDN 上

Any public static ( Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

对于 XmlNodeList 也是一样的类。

我在以下上下文中使用这些类。在 Parallel.Foreach 里面我愿意:

X MyX = new X();
string XMLstring = MyX.GetXML(ID, true);
XmlDocument doc = new XmlDocument();
doc.LoadXml(XMLstring);
XmlNodeList nodeList = doc.SelectNodes("blah/secondblah");

哪里X在 IT 提供给我的库中定义,其中 ID是一个 int (我大致循环)。

这已经在非并行环境中进行了全面测试,stringGetXML 制作确实是正确的,对应的XmlDocument同样,并通过 XmlNodeList“解析”它提供了预期的结果。

现在,它是这个并行上下文并假设 XGetXML确实是线程安全的,事实上我new一个XmlDocument在每个循环中是否确保线程安全?我的意思是,我怎么知道 string string 的成员(首先是否有这样的字符串?因为我在文档中没有看到任何 XmlDocument 属性)收到LoadXmlstatic还是不是?

我想我并不真正理解我在上面引用的 MSDN 文档的一部分......

最佳答案

文档意味着任何静态方法(看起来像 XmlDocument.MethodCall)都是线程安全的。这与您无关 - 您不会调用任何这些方法。< em>其他方法(例如针对 doc)不是静态的 - 因此不能保证它们是线程安全的。

只要 doc(以及 nodeList 和其他“非线程安全”变量)仅在单线程。

因此,如果您在 Parallel.ForEach 之前填充了 doc,然后在 Parallel.ForEach 中使用了 doc - 那是行不通的。

但是如果您填充并使用 doc inside Parallel.ForEach 你会没事的(因为每个线程都会得到它自己的文档 - 因此线程安全性赢了这不是问题)。

为了 100% 确定,您需要发布整个方法(包括 Parallel.ForEach 调用)以供我们查看。

关于c# - "Any public static members of XmlDocument are thread safe. Any instance members are not guaranteed to be thread safe": yes, 但,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44367866/

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