Thread.EndCriticalRegion Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Memberi tahu host bahwa eksekusi akan memasuki wilayah kode di mana efek utas membatalkan atau pengecualian yang tidak tertangani terbatas pada tugas saat ini.
public:
static void EndCriticalRegion();
public static void EndCriticalRegion();
static member EndCriticalRegion : unit -> unit
Public Shared Sub EndCriticalRegion ()
Contoh
Contoh berikut menunjukkan penggunaan BeginCriticalRegion metode dan EndCriticalRegion untuk membagi blok kode menjadi wilayah penting dan tidak penting.
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
Keterangan
Host runtime bahasa umum (CLR), seperti Microsoft SQL Server 2005, dapat menetapkan kebijakan yang berbeda untuk kegagalan di wilayah kode penting dan non-kritis. Wilayah kritis adalah salah satu di mana efek utas dibatalkan atau pengecualian yang tidak tertangani mungkin tidak terbatas pada tugas saat ini. Sebaliknya, pembatalan atau kegagalan di wilayah kode yang tidak penting hanya memengaruhi tugas di mana kesalahan terjadi.
Misalnya, pertimbangkan tugas yang mencoba mengalokasikan memori sambil menahan kunci. Jika alokasi memori gagal, membatalkan tugas saat ini tidak cukup untuk memastikan stabilitas AppDomain, karena mungkin ada tugas lain di domain yang menunggu kunci yang sama. Jika tugas saat ini dihentikan, tugas lain bisa di-deadlock.
Ketika kegagalan terjadi di wilayah penting, host mungkin memutuskan untuk membongkar seluruh AppDomain daripada mengambil risiko melanjutkan eksekusi dalam keadaan yang berpotensi tidak stabil. Untuk memberi tahu host bahwa kode Anda memasuki wilayah penting, panggil BeginCriticalRegion. Panggil EndCriticalRegion saat eksekusi kembali ke wilayah kode yang tidak penting.
Menggunakan metode ini dalam kode yang berjalan di bawah SQL Server 2005 mengharuskan kode dijalankan pada tingkat perlindungan host tertinggi.