Thread.BeginCriticalRegion Metoda

Definicja

Powiadamia hosta, że wykonanie ma wprowadzić region kodu, w którym skutki przerwania wątku lub nieobsługiwanego wyjątku mogą zagrozić innym zadaniam w domenie aplikacji.

public static void BeginCriticalRegion ();

Przykłady

W poniższym przykładzie pokazano użycie BeginCriticalRegion metod i EndCriticalRegion do dzielenia bloku kodu na regiony krytyczne i niekrytyczne.

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

Uwagi

Hosty środowiska uruchomieniowego języka wspólnego (CLR), takie jak Microsoft SQL Server 2005, mogą ustanowić różne zasady dotyczące błędów w krytycznych i niekrytycznych regionach kodu. Region krytyczny to region, w którym skutki przerwania wątku lub nieobsługiwanego wyjątku mogą nie być ograniczone do bieżącego zadania. Natomiast przerwanie lub niepowodzenie w niekrytycznym regionie kodu wpływa tylko na zadanie, w którym występuje błąd.

Rozważmy na przykład zadanie, które próbuje przydzielić pamięć podczas przechowywania blokady. Jeśli alokacja pamięci zakończy się niepowodzeniem, przerwanie bieżącego zadania nie jest wystarczające, aby zapewnić stabilność AppDomainelementu , ponieważ w domenie mogą znajdować się inne zadania oczekujące na tę samą blokadę. Jeśli bieżące zadanie zostanie zakończone, inne zadania mogą zostać zakleszczone.

W przypadku wystąpienia awarii w regionie krytycznym host może zdecydować się na zwolnienie całego AppDomain , a nie na ryzyko kontynuowania wykonywania w stanie potencjalnie niestabilnym. Aby poinformować hosta, że kod wchodzi w krytyczny region, wywołaj metodę BeginCriticalRegion. Wywołaj wywołanie EndCriticalRegion , gdy wykonanie powróci do niekrytycznego regionu kodu.

Użycie tej metody w kodzie uruchamianym w SQL Server 2005 wymaga uruchomienia kodu na najwyższym poziomie ochrony hosta.

Dotyczy

Produkt Wersje
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

Zobacz też