这实际上是三个不同的概念还是我变得混乱?(我一直在阅读有关线程和垃圾收集的文章,并让自己感到困惑。)
“关键部分” - 我认为这可能只是您不希望多个线程同时访问的代码部分的术语,即在 lock 和 Monitor.Enter/Exit 语句中?
“关键区域” ——这里没有真正的线索——MSDN 说了类似“这告诉主机在该部分中抛出的异常可能会产生更广泛的影响”。并且“CLR 的主机,例如 Sql Server”可以选择“以不同的方式”处理关键区域内抛出的异常。不一样怎么办?为什么?而且,最重要的是,在哪些现实世界场景中,我可能需要将代码标记为关键区域?
“受约束的执行区域” - 我在阅读垃圾收集文章中的 CriticalFinalizerObject 时遇到了这个问题。
我可以从 MSDN 中了解到,这些区域之一中的代码以某种方式保证运行(但如何运行?),因此不得抛出“带外”异常。
什么是out-of-band exception
? (我确实在谷歌上搜索过,但它只是问我是否是指“越界异常”)。
是否有任何未处理的异常?还是只有某些类型的例外?再一次,最重要的是,在哪些现实世界场景中我可能需要“受约束的执行区域”?
由于我完全不了解这些概念,因此我不确定这个问题除了“.NET”之外还需要什么标签。