Thread.BeginCriticalRegion 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
通知宿主执行将要进入一个代码区域,在该代码区域内线程中止或未经处理异常的影响可能会危害应用程序域中的其他任务。
public:
static void BeginCriticalRegion();
public static void BeginCriticalRegion ();
static member BeginCriticalRegion : unit -> unit
Public Shared Sub BeginCriticalRegion ()
示例
以下示例演示了如何使用 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.
}
}
open System.Threading
let 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 。
在 SQL Server 2005 下运行的代码中使用此方法需要以最高主机保护级别运行代码。