Thread.Abort 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.
Menaikkan di utas ThreadAbortException tempat alur dipanggil, untuk memulai proses penghentian utas. Memanggil metode ini biasanya mengakhiri utas.
Overload
| Nama | Deskripsi |
|---|---|
| Abort() |
Kedaluwarsa.
Menaikkan di utas ThreadAbortException tempat alur dipanggil, untuk memulai proses penghentian utas. Memanggil metode ini biasanya mengakhiri utas. |
| Abort(Object) |
Kedaluwarsa.
Menaikkan dalam utas tempat alur dipanggil, untuk memulai proses penghentian utas ThreadAbortException sambil juga memberikan informasi pengecualian tentang penghentian utas. Memanggil metode ini biasanya mengakhiri utas. |
Keterangan
Penting
Gunakan metode dengan Thread.Abort hati-hati. Terutama ketika Anda menyebutnya untuk membatalkan utas selain utas saat ini, Anda tidak tahu kode apa yang telah dijalankan atau gagal dijalankan ketika ThreadAbortException dilemparkan. Anda juga tidak dapat memastikan status aplikasi Anda, atau setiap aplikasi dan status pengguna yang perlu dipertahankan. Misalnya, panggilan Thread.Abort dapat mencegah eksekusi konstruktor statis atau rilis sumber daya terkelola atau tidak terkelola.
Abort()
- Sumber:
- Thread.cs
- Sumber:
- Thread.cs
- Sumber:
- Thread.cs
- Sumber:
- Thread.cs
- Sumber:
- Thread.cs
Perhatian
Thread.Abort is not supported and throws PlatformNotSupportedException.
Menaikkan di utas ThreadAbortException tempat alur dipanggil, untuk memulai proses penghentian utas. Memanggil metode ini biasanya mengakhiri utas.
public:
void Abort();
[System.Obsolete("Thread.Abort is not supported and throws PlatformNotSupportedException.", DiagnosticId="SYSLIB0006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public void Abort();
public void Abort();
[<System.Obsolete("Thread.Abort is not supported and throws PlatformNotSupportedException.", DiagnosticId="SYSLIB0006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
member this.Abort : unit -> unit
member this.Abort : unit -> unit
Public Sub Abort ()
- Atribut
Pengecualian
.NET Core dan .NET 5+ saja: Dalam semua kasus.
Pemanggil tidak memiliki izin yang diperlukan.
Utas yang sedang dibatalkan saat ini ditangguhkan.
Keterangan
Metode ini usang. Pada .NET 5 dan versi yang lebih baru, memanggil metode ini menghasilkan peringatan waktu kompilasi. Metode ini melemparkan PlatformNotSupportedException pada run time pada .NET 5 dan yang lebih baru dan .NET Core.
Ketika metode ini dipanggil pada utas, sistem melemparkan di utas ThreadAbortException untuk membatalkannya.
ThreadAbortException adalah pengecualian khusus yang dapat ditangkap oleh kode aplikasi, tetapi dilemparkan kembali di akhir catch blok kecuali ResetAbort dipanggil.
ResetAbort membatalkan permintaan untuk membatalkan, dan mencegah penghentian utas ThreadAbortException . Blok yang tidak dieksekusi finally dijalankan sebelum utas dibatalkan.
Nota
Ketika utas Abort memanggil dirinya sendiri, efeknya mirip dengan melemparkan pengecualian; segera ThreadAbortException terjadi, dan hasilnya dapat diprediksi. Namun, jika satu utas memanggil pada utas Abort lain, batal mengganggu kode apa pun yang berjalan. Ada juga kemungkinan bahwa konstruktor statis dapat dibatalkan. Dalam kasus yang jarang terjadi, ini mungkin mencegah instans kelas tersebut dibuat di domain aplikasi tersebut.
Utas tidak dijamin untuk segera dibatalkan, atau sama sekali. Situasi ini dapat terjadi jika utas melakukan jumlah komputasi yang tidak terbatas di finally blok yang disebut sebagai bagian dari prosedur pembatalan, sehingga tidak terbatas menunda pembatalan. Untuk menunggu hingga utas dibatalkan, Anda dapat memanggil Join metode pada utas setelah memanggil Abort metode, tetapi tidak ada jaminan bahwa penantian akan berakhir.
Nota
Utas yang memanggil mungkin memblokir jika utas Abort yang dibatalkan berada di wilayah kode yang dilindungi, seperti catch blok, finally blok, atau wilayah eksekusi yang dibatasi. Jika utas Abort yang memanggil memegang kunci yang diperlukan utas yang dibatalkan, kebuntuan dapat terjadi.
Jika Abort dipanggil pada utas yang belum dimulai, utas akan dibatalkan ketika Start dipanggil. Jika Abort dipanggil pada utas yang diblokir atau sedang tidur, utas terganggu dan kemudian dibatalkan.
Jika Abort dipanggil pada utas yang telah ditangguhkan, ThreadStateException dilemparkan ke utas yang disebut Abort, dan AbortRequested ditambahkan ke ThreadState properti utas yang dibatalkan. A ThreadAbortException tidak dilemparkan ke utas yang ditangguhkan sampai Resume dipanggil.
Jika Abort dipanggil pada utas terkelola saat menjalankan kode yang ThreadAbortException tidak dikelola, tidak dilemparkan sampai utas kembali ke kode terkelola.
Jika dua panggilan datang Abort pada saat yang sama, dimungkinkan bagi satu panggilan untuk mengatur informasi status dan panggilan lainnya untuk menjalankan Abort. Namun, aplikasi tidak dapat mendeteksi situasi ini.
Setelah Abort dipanggil pada utas, status utas mencakup AbortRequested. Setelah utas dihentikan sebagai akibat dari panggilan yang berhasil ke Abort, status utas diubah menjadi Stopped. Dengan izin yang memadai, utas yang merupakan target Abort dapat membatalkan pembatalan menggunakan ResetAbort metode . Untuk contoh yang menunjukkan pemanggilan ResetAbort metode, lihat ThreadAbortException kelas .
Lihat juga
- ThreadAbortException
- Aborted
- AbortRequested
- Utas dan Pengaluran
- Menggunakan utas dan proses penguliran
- Menghancurkan utas
Berlaku untuk
Abort(Object)
- Sumber:
- Thread.cs
- Sumber:
- Thread.cs
- Sumber:
- Thread.cs
- Sumber:
- Thread.cs
- Sumber:
- Thread.cs
Perhatian
Thread.Abort is not supported and throws PlatformNotSupportedException.
Menaikkan dalam utas tempat alur dipanggil, untuk memulai proses penghentian utas ThreadAbortException sambil juga memberikan informasi pengecualian tentang penghentian utas. Memanggil metode ini biasanya mengakhiri utas.
public:
void Abort(System::Object ^ stateInfo);
[System.Obsolete("Thread.Abort is not supported and throws PlatformNotSupportedException.", DiagnosticId="SYSLIB0006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public void Abort(object? stateInfo);
public void Abort(object stateInfo);
public void Abort(object? stateInfo);
[<System.Obsolete("Thread.Abort is not supported and throws PlatformNotSupportedException.", DiagnosticId="SYSLIB0006", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
member this.Abort : obj -> unit
member this.Abort : obj -> unit
Public Sub Abort (stateInfo As Object)
Parameter
- stateInfo
- Object
Objek yang berisi informasi khusus aplikasi, seperti status, yang dapat digunakan oleh utas yang dibatalkan.
- Atribut
Pengecualian
.NET Core dan .NET 5+ saja: Dalam semua kasus.
Pemanggil tidak memiliki izin yang diperlukan.
Utas yang sedang dibatalkan saat ini ditangguhkan.
Contoh
Contoh kode berikut menunjukkan cara meneruskan informasi ke utas yang dibatalkan.
using System;
using System.Threading;
class Test
{
public static void Main()
{
Thread newThread = new Thread(new ThreadStart(TestMethod));
newThread.Start();
Thread.Sleep(1000);
// Abort newThread.
Console.WriteLine("Main aborting new thread.");
newThread.Abort("Information from Main.");
// Wait for the thread to terminate.
newThread.Join();
Console.WriteLine("New thread terminated - Main exiting.");
}
static void TestMethod()
{
try
{
while(true)
{
Console.WriteLine("New thread running.");
Thread.Sleep(1000);
}
}
catch(ThreadAbortException abortException)
{
Console.WriteLine((string)abortException.ExceptionState);
}
}
}
open System.Threading
let testMethod () =
try
while true do
printfn "New thread running."
Thread.Sleep 1000
with :? ThreadAbortException as abortException ->
printfn $"{abortException.ExceptionState :?> string}"
let newThread = Thread testMethod
newThread.Start()
Thread.Sleep 1000
// Abort newThread.
printfn "Main aborting new thread."
newThread.Abort "Information from Main."
// Wait for the thread to terminate.
newThread.Join()
printfn "New thread terminated - Main exiting."
Imports System.Threading
Public Class Test
<MTAThread> _
Shared Sub Main()
Dim newThread As New Thread(AddressOf TestMethod)
newThread.Start()
Thread.Sleep(1000)
' Abort newThread.
Console.WriteLine("Main aborting new thread.")
newThread.Abort("Information from Main.")
' Wait for the thread to terminate.
newThread.Join()
Console.WriteLine("New thread terminated - Main exiting.")
End Sub
Shared Sub TestMethod()
Try
While True
Console.WriteLine("New thread running.")
Thread.Sleep(1000)
End While
Catch abortException As ThreadAbortException
Console.WriteLine( _
CType(abortException.ExceptionState, String))
End Try
End Sub
End Class
Keterangan
Metode ini usang. Pada .NET 5 dan versi yang lebih baru, memanggil metode ini menghasilkan peringatan waktu kompilasi. Metode ini melemparkan PlatformNotSupportedException pada run time pada .NET 5 dan yang lebih baru dan .NET Core.
Ketika metode ini dipanggil pada utas, sistem melemparkan di utas ThreadAbortException untuk membatalkannya.
ThreadAbortException adalah pengecualian khusus yang dapat ditangkap oleh kode aplikasi, tetapi dilemparkan kembali di akhir catch blok kecuali ResetAbort dipanggil.
ResetAbort membatalkan permintaan untuk membatalkan, dan mencegah penghentian utas ThreadAbortException . Blok yang tidak dieksekusi finally dijalankan sebelum utas dibatalkan.
Nota
Ketika utas Abort memanggil dirinya sendiri, efeknya mirip dengan melemparkan pengecualian; segera ThreadAbortException terjadi, dan hasilnya dapat diprediksi. Namun, jika satu utas memanggil pada utas Abort lain, batal mengganggu kode apa pun yang berjalan. Ada kemungkinan bahwa konstruktor statis dapat dibatalkan. Dalam kasus yang jarang terjadi, ini mungkin mencegah instans kelas tersebut dibuat di domain aplikasi tersebut.
Utas tidak dijamin untuk segera dibatalkan, atau sama sekali. Situasi ini dapat terjadi jika utas melakukan jumlah komputasi yang tidak terbatas di finally blok yang disebut sebagai bagian dari prosedur pembatalan, sehingga tidak terbatas menunda pembatalan. Untuk menunggu sampai utas dibatalkan, Anda dapat memanggil Join metode pada utas setelah memanggil Abort metode, tetapi tidak ada jaminan bahwa penantian akan berakhir.
Nota
Utas yang memanggil mungkin memblokir jika utas Abort yang dibatalkan berada di wilayah kode yang dilindungi, seperti catch blok, finally blok, atau wilayah eksekusi yang dibatasi. Jika utas Abort yang memanggil memegang kunci yang diperlukan utas yang dibatalkan, kebuntuan dapat terjadi.
Jika Abort dipanggil pada utas yang belum dimulai, utas akan dibatalkan ketika Start dipanggil. Jika Abort dipanggil pada utas yang diblokir atau sedang tidur, utas terganggu dan kemudian dibatalkan.
Jika Abort dipanggil pada utas yang telah ditangguhkan, ThreadStateException dilemparkan ke utas yang disebut Abort, dan AbortRequested ditambahkan ke ThreadState properti utas yang dibatalkan. A ThreadAbortException tidak dilemparkan ke utas yang ditangguhkan sampai Resume dipanggil.
Jika Abort dipanggil pada utas terkelola saat menjalankan kode yang ThreadAbortException tidak dikelola, tidak dilemparkan sampai utas kembali ke kode terkelola.
Jika dua panggilan datang Abort pada saat yang sama, dimungkinkan bagi satu panggilan untuk mengatur informasi status dan panggilan lainnya untuk menjalankan Abort. Namun, aplikasi tidak dapat mendeteksi situasi ini.
Setelah Abort dipanggil pada utas, status utas mencakup AbortRequested. Setelah utas dihentikan sebagai akibat dari panggilan yang berhasil ke Abort, status utas diubah menjadi Stopped. Dengan izin yang memadai, utas yang merupakan target Abort dapat membatalkan pembatalan menggunakan ResetAbort metode . Untuk contoh yang menunjukkan pemanggilan ResetAbort metode, lihat ThreadAbortException kelas .
Lihat juga
- ThreadAbortException
- Aborted
- AbortRequested
- Utas dan Pengaluran
- Menggunakan utas dan proses penguliran
- Menghancurkan utas