Bagikan melalui


Thread.Abort Metode

Definisi

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

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

Berlaku untuk