据我了解,必须在线程中止生效之前完成finally块。出于什么目的而应该使用Thread.BeginCriticalRegion
,冒着终止appdomain的风险?
示例:
try
{
}
finally
{
CriticalOperation();
}
或
Thread.BeginCriticalRegion();
CriticalOperation();
Thread.EndCriticalRegion();
答案 0 :(得分:3)
为了使其变得非常简单,try... finally...
可以防范Thread.Abort
(finally
部分受到完全保护,无法中断/将始终执行),而{ {1}}仅向.NET的运行时提供一些元信息:
来自http://blogs.msdn.com/b/bclteam/archive/2005/06/14/429181.aspx
关键地区并没有真正做多少。
...
关键区域的第一个效果是通知CLR一个托管代码块正在锁定的方法
(请注意,这只是信息......运行时的作用是它的问题。这里不能保证)
第二个影响是该代码块中的内存分配被标记为appdomain-critical。
然后它解释了运行时应优先考虑对该代码块的内存分配...所以运行时的其他元信息不保证程序员