Bagikan melalui


CA2008: Jangan membuat tugas tanpa melampirkan TaskScheduler

Properti Nilai
ID Aturan CA2008
Judul Jangan membuat tugas tanpa melewati TaskScheduler
Kategori Keandalan
Perbaikan bersifat disruptif atau non-disruptif Non-disruptif
Diaktifkan secara default di .NET 10 Tidak

Penyebab

Pembuatan tugas atau operasi kelanjutan menggunakan kombinasi metode yang tidak menentukan parameter TaskScheduler.

Deskripsi aturan

Metode pembuatan dan kelanjutan tugas .NET berikut memiliki overload yang memungkinkan Anda untuk menentukan atau menghilangkan instans TaskScheduler.

Selalu tentukan argumen eksplisit TaskScheduler untuk menghindari nilai default Current , yang perilakunya ditentukan oleh pemanggil dan dapat bervariasi pada runtime. Current mengembalikan penjadwal yang terkait dengan Task yang sedang berjalan pada utas tersebut. Jika tidak ada tugas seperti itu, fungsi ini akan mengembalikan Default, yang mewakili kumpulan utas. Penggunaan Current dapat menyebabkan kebuntuan atau masalah respons UI dalam beberapa situasi, ketika dimaksudkan untuk menjalankan tugas pada kumpulan utas, tetapi sebaliknya menunggu untuk kembali ke utas UI.

Untuk informasi lebih lanjut dan contoh terperinci, lihat TaskCreationOptions baru dan TaskContinuationOptions di .NET Framework 4.5.

Cara memperbaiki pelanggaran

Untuk memperbaiki pelanggaran, panggil metode overload yang mengambil TaskScheduler dan secara eksplisit meneruskan Default atau Current untuk memperjelas maksud.

Example

// This code violates the rule.
var badTask = Task.Factory.StartNew(
    () =>
    {
        // ...
    }
);
badTask.ContinueWith(
    t =>
    {
        // ...
    }
);

// This code satisfies the rule.
var goodTask = Task.Factory.StartNew(
    () =>
    {
        // ...
    },
    CancellationToken.None,
    TaskCreationOptions.None,
    TaskScheduler.Default
);
goodTask.ContinueWith(
    t =>
    {
        // ...
    },
    CancellationToken.None,
    TaskContinuationOptions.None,
    TaskScheduler.Default
);

Kapan harus menekan peringatan

Peringatan ini ditujukan terutama untuk perpustakaan perangkat lunak, tempat kode dapat dijalankan dalam lingkungan yang acak dan tidak boleh membuat asumsi tentang lingkungan atau cara pemanggil metode mungkin akan memanggil atau menunggunya. Mungkin tepat untuk menekan peringatan untuk proyek yang mewakili kode aplikasi daripada kode pustaka.

Menyembunyikan peringatan

Jika Anda hanya ingin menyembunyikan satu pelanggaran, tambahkan arahan praprosedur ke file sumber Anda untuk dinonaktifkan lalu aktifkan kembali aturannya.

#pragma warning disable CA2008
// The code that's violating the rule is on this line.
#pragma warning restore CA2008

Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none dalam file konfigurasi.

[*.{cs,vb}]
dotnet_diagnostic.CA2008.severity = none

Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.

Lihat juga