运行 循环时的不一致异常

Inconsistent exceptions when running loop

最近,我创建了一个 Web 请求应用程序,用于根据给定日期检索网站上的新闻文章。我创建了一个日期集合,即 [06-07-2021、06-08-2021、06-01-2021 等],并有一个在集合上运行的 for 循环和 returns 新闻文章那个日期。为了加快这个过程,我创建了一个在集合上运行的 Parallel.ForEach 循环,它将新闻文章存储在字典中,其中键是日期,值是文章。在并行循环中,当我尝试将键值对添加到字典中时,我收到 *System.InvalidOperationException。它不会一直发生,所以我通常可以通过重新启动程序来解决问题。我收到的另一个例外是 **System.NullReferenceException 我认为这很奇怪,因为每个变量都被分配了一个值,即使我的方法 return 一个值,尽管是一个空字符串如果请求有问题。此异常也可以通过重新启动应用程序来解决。

我的问题是为什么运行这个应用程序的异常不一致?

*更改非并发集合的操作必须具有独占访问权限。对此集合执行并发更新并损坏了它的状态。集合的状态不再正确。

**对象引用未设置到对象的实例。

当多个线程同时访问未明确记录为线程安全的 class 时,其行为变为 未定义。这意味着“任何事情”都可能发生,提交错误报告抱怨不良行为将是无效的,因为无论发生什么,class.

的制造商都不会将其视为错误。

“任何”不仅包括随机嘈杂的异常,还包括静默数据损坏或更新丢失。

您可以深入研究 Dictionary<TKey, TValue> class 的 source code 并尝试了解特定异常的来源,但这将是徒劳的恕我直言。您将获得的知识不太可能适用于任何现实生活场景。