Thread.Abort sudah usang

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

Ubah deskripsi

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

Mulai dari .NET 5, Thread.Abort ditandai usang sebagai peringatan. Menggunakan metode ini menghasilkan peringatan kompilator SYSLIB0006. Implementasi metode tidak berubah, dan terus melemparkan PlatformNotSupportedException.

Alasan perubahan

Mengingat bahwa Thread.Abort selalu melemparkan PlatformNotSupportedException pada semua implementasi .NET kecuali .NET Framework, ObsoleteAttribute ditambahkan ke metode untuk menarik perhatian ke tempat-tempat di mana itu 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 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. Untuk alasan ini, Thread.Abort selalu melempar PlatformNotSupportedException pada .NET Core dan .NET 5+.

Versi yang diperkenalkan

5.0

  • CancellationToken Gunakan untuk membatalkan pemrosesan unit kerja alih-alih 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 lebih lanjut, lihat Pembatalan pada thread yang dikelola.

  • Untuk menghilangkan peringatan saat kompilasi, hilangkan kode peringatan SYSLIB0006. Peringatan ini khusus untuk Thread.Abort, dan menekan peringatan ini tidak akan menekan peringatan usang lainnya dalam kode Anda. Namun, kami sarankan Anda menghapus panggilan ke Thread.Abort alih-alih menekan peringatan.

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

    Anda juga dapat mengabaikan peringatan dalam 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