Try-Finally vs Thread.BeginCriticalRegion

时间:2015-02-28 20:33:55

标签: c# .net multithreading

据我了解,必须在线程中止生效之前完成finally块。出于什么目的而应该使用Thread.BeginCriticalRegion,冒着终止appdomain的风险?

示例:

try
{
}
finally
{
    CriticalOperation();
}

Thread.BeginCriticalRegion();
CriticalOperation();
Thread.EndCriticalRegion();

1 个答案:

答案 0 :(得分:3)

为了使其变得非常简单,try... finally...可以防范Thread.Abortfinally部分受到完全保护,无法中断/将始终执行),而{ {1}}仅向.NET的运行时提供一些元信息:

来自http://blogs.msdn.com/b/bclteam/archive/2005/06/14/429181.aspx

  

关键地区并没有真正做多少。

...

  

关键区域的第一个效果是通知CLR一个托管代码块正在锁定的方法

(请注意,这只是信息......运行时的作用是它的问题。这里不能保证)

  

第二个影响是该代码块中的内存分配被标记为appdomain-critical。

然后它解释了运行时应优先考虑对该代码块的内存分配...所以运行时的其他元信息不保证程序员