Thread.EndCriticalRegion 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
通知主机执行将要进入一个代码区域,在该代码区域内线程中止或未经处理异常的影响限于当前任务。
public:
static void EndCriticalRegion();
public static void EndCriticalRegion ();
static member EndCriticalRegion : unit -> unit
Public Shared Sub EndCriticalRegion ()
示例
下面的示例演示如何使用 和 方法将代码块划分为关键和非 BeginCriticalRegion EndCriticalRegion 关键区域。
using namespace System::Threading;
public ref class MyUtility
{
public:
void PerformTask()
{
// Code in this region can be aborted without affecting
// other tasks.
//
Thread::BeginCriticalRegion();
//
// The host might decide to unload the application domain
// if a failure occurs in this code region.
//
Thread::EndCriticalRegion();
//
// Code in this region can be aborted without affecting
// other tasks.
}
};
using System.Threading;
public class MyUtility
{
public void PerformTask()
{
// Code in this region can be aborted without affecting
// other tasks.
//
Thread.BeginCriticalRegion();
//
// The host might decide to unload the application domain
// if a failure occurs in this code region.
//
Thread.EndCriticalRegion();
//
// Code in this region can be aborted without affecting
// other tasks.
}
}
Imports System.Threading
Public Class MyUtility
Public Sub PerformTask()
' Code in this region can be aborted without affecting
' other tasks.
'
Thread.BeginCriticalRegion()
'
' The host might decide to unload the application domain
' if a failure occurs in this code region.
'
Thread.EndCriticalRegion()
' Code in this region can be aborted without affecting
' other tasks.
End Sub
End Class
注解
公共语言运行时 (CLR) 的宿主,如 Microsoft SQL Server 2005,可以为代码的关键和非关键区域中的故障建立不同的策略。 关键区域是指线程中止或未经处理的异常的影响可能不会限制为当前任务。 相反,非关键代码区域中的中止或失败只会影响发生错误的任务。
例如,假设某个任务在持有锁时尝试分配内存。 如果内存分配失败,则中止当前任务不足以确保的稳定性 AppDomain ,因为域中的其他任务可能会等待相同的锁。 如果当前任务已终止,则其他任务可能会死锁。
当关键区域发生故障时,主机可能决定卸载整个, AppDomain 而不是在可能不稳定的状态下继续执行的风险。 若要通知宿主代码正在进入关键区域,请调用 BeginCriticalRegion 。 EndCriticalRegion当执行返回到非关键代码区域时调用。
在 2005 SQL Server下运行的代码中使用此方法需要代码在最高主机保护级别运行。