Bagikan melalui


Thread.Abort kedaluwarsa

API Thread.Abort sudah kedaluwarsa. Proyek yang menargetkan .NET 5 atau versi yang lebih baru akan menemui peringatan waktu kompilasi SYSLIB0006 jika metode ini dipanggil.

Deskripsi perubahan

Sebelumnya, panggilan ke Thread.Abort tidak menghasilkan peringatan waktu kompilasi, namun, metode ini menampilkan PlatformNotSupportedException pada runtime.

Mulai dari .NET 5, Thread.Abort ditandai sebagai peringatan kedaluwarsa. Memanggil metode ini menghasilkan peringatan pengompilasi SYSLIB0006. Implementasi metode tidak berubah, dan terus menampilkan PlatformNotSupportedException.

Alasan untuk berubah

Mengingat bahwa Thread.Abort selalu menampilkan PlatformNotSupportedException pada semua implementasi .NET kecuali .NET Framework, ObsoleteAttribute telah ditambahkan ke metode untuk menarik perhatian ke tempatnya dipanggil.

Saat Anda memanggil Thread.Abort untuk membatalkan utas selain utas saat ini, Anda tidak tahu kode apa yang telah dijalankan atau gagal dijalankan saat ThreadAbortException ditampilkan. Anda juga tidak dapat memastikan status aplikasi Anda atau aplikasi dan status pengguna apa pun yang bertanggung jawab untuk menjaganya. Misalnya, memanggil Thread.Abort dapat mencegah eksekusi konstruktor statis atau rilis sumber daya terkelola atau tidak terkelola. Karena alasan ini, Thread.Abort selalu menampilkan PlatformNotSupportedException pada .NET Core dan .NET 5+.

Versi yang diperkenalkan

5.0

  • Gunakan CancellationToken untuk membatalkan pemrosesan unit kerja, bukan memanggil Thread.Abort. Contoh berikut mengilustrasikan penggunaan CancellationToken.

    void ProcessPendingWorkItemsNew(CancellationToken cancellationToken)
    {
        if (QueryIsMoreWorkPending())
        {
            // If the CancellationToken is marked as "needs to cancel",
            // this will throw the appropriate exception.
            cancellationToken.ThrowIfCancellationRequested();
    
            WorkItem work = DequeueWorkItem();
            ProcessWorkItem(work);
        }
    }
    

    Untuk informasi selengkapnya, lihat Pembatalan di alur terkelola .

  • Untuk menyembunyikan peringatan waktu kompilasi, sembunyikan kode peringatan SYSLIB0006. Kode peringatan khusus untuk Thread.Abort dan menyembunyikannya tidak akan menyembunyikan peringatan kedaluwarsa lainnya dalam kode Anda. Namun, sebaiknya Anda menghapus panggilan ke Thread.Abort daripada menyembunyikan peringatan tersebut.

    void MyMethod()
    {
    #pragma warning disable SYSLIB0006
        Thread.CurrentThread.Abort();
    #pragma warning restore SYSLIB0006
    }
    

    Anda juga dapat menyembunyikan peringatan di file proyek.

    <PropertyGroup>
      <OutputType>Exe</OutputType>
      <TargetFramework>net5.0</TargetFramework>
      <!-- Disable "Thread.Abort is obsolete" warnings for entire project. -->
      <NoWarn>$(NoWarn);SYSLIB0006</NoWarn>
    </PropertyGroup>
    

API yang Terpengaruh