据我了解,必须在线程中止生效之前完成 finally block 。出于什么目的应该使用 Thread.BeginCriticalRegion
,冒着终止 appdomain 的风险?
例子:
try
{
}
finally
{
CriticalOperation();
}
或
Thread.BeginCriticalRegion();
CriticalOperation();
Thread.EndCriticalRegion();
最佳答案
为了让它变得非常简单,try...finally...
防止 Thread.Abort
(finally
部分完全protected 且不能被中断/将始终被执行),而 Thread.BeginCriticalRegion()
仅向 .NET 的运行时提供一些元信息:
Critical regions don't really do much.
...
The first effect for critical regions is a way of informing the CLR that a lock is being held by a block of managed code
(注意,这只是信息……运行时做什么是它的问题。这里不能保证)
The second effect is that memory allocations within that block of code are marked as appdomain-critical.
然后它解释了运行时应该优先考虑为该代码块分配内存...所以运行时的其他元信息没有程序员的保证
关于c# - Try-Finally 与 Thread.BeginCriticalRegion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28786569/