Thread.EndCriticalRegion 方法

定義

通知主機執行即將進入一個程式碼區域,該區域中執行緒中止或未處理異常的影響僅限於當前任務。

public:
 static void EndCriticalRegion();
public static void EndCriticalRegion();
static member EndCriticalRegion : unit -> unit
Public Shared Sub EndCriticalRegion ()

範例

以下範例示範如何使用 BeginCriticalRegion and EndCriticalRegion 方法將程式碼區塊劃分為關鍵區塊與非關鍵區塊。

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 下的程式碼中使用此方法,則需在最高主機保護層級執行程式碼。

適用於

另請參閱