Thread.BeginCriticalRegion メソッド

定義

スレッドの中止または処理されない例外の影響によりアプリケーション ドメイン内の他のタスクが悪影響を受ける可能性があるコード領域に実行が入ることをホストに通知します。

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.
    }
}
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

注釈

Microsoft SQL Server 2005 など、共通言語ランタイム (CLR) のホストは、重要なコード領域と重要でないコード領域での障害に対して異なるポリシーを確立できます。 クリティカル リージョンとは、スレッド中止またはハンドルされない例外の影響が現在のタスクに限定されない可能性がある領域です。 これに対し、コードの重大でない領域での中止または失敗は、エラーが発生したタスクにのみ影響します。

たとえば、ロックを保持している間にメモリの割り当てを試みるタスクを考えてみる場合です。 メモリ割り当てが失敗した場合、現在のタスクを中止しても、 の安定性を確保するには十分ではありません。ドメイン内の他のタスクが同じロックを待機している可能性 AppDomain があります。 現在のタスクが終了すると、他のタスクがデッドロックする可能性があります。

重大なリージョンで障害が発生した場合、ホストは、不安定な可能性のある状態で実行を継続するリスクを取るのではなく、全体をアンロード AppDomain する場合があります。 コードが重要なリージョンに入るとホストに通知するには、 を呼び出します BeginCriticalRegion 。 実行 EndCriticalRegion がコードの重要でない領域に戻った場合に を呼び出します。

2005 年 1 月 2005 年に実行されるコードでこのメソッドを使用するにはSQL Server最高のホスト保護レベルでコードを実行する必要があります。

適用対象

こちらもご覧ください