Baca dalam bahasa Inggris

Bagikan melalui


Kesalahan dan peringatan yang terkait dengan lock pernyataan dan sinkronisasi utas

Ada beberapa kesalahan yang terkait dengan lock pernyataan dan sinkronisasi utas:

  • CS0185: 'type' bukan jenis referensi seperti yang diperlukan oleh pernyataan kunci.
  • CS1996: Tidak dapat menunggu dalam isi pernyataan kunci
  • CS9217: Pernyataan kunci pada nilai jenis 'System.Threading.Lock' tidak dapat digunakan dalam metode asinkron atau ekspresi lambda asinkron.

Selain itu, pengkompilasi mungkin menghasilkan peringatan berikut yang terkait dengan lock pernyataan dan sinkronisasi utas:

  • CS9216: Nilai jenis System.Threading.Lock yang dikonversi ke jenis yang berbeda akan menggunakan kemungkinan penguncian berbasis monitor yang tidak diinginkan dalam lock pernyataan.

kesalahan pernyataan kunci

  • CS0185: 'type' bukan jenis referensi seperti yang diperlukan oleh pernyataan kunci.
  • CS1996: Tidak dapat menunggu dalam isi pernyataan kunci
  • CS9217: Pernyataan kunci pada nilai jenis 'System.Threading.Lock' tidak dapat digunakan dalam metode asinkron atau ekspresi lambda asinkron.

Kesalahan ini menunjukkan bahwa kode Anda melanggar aturan mengenai lock pernyataan:

  • Objek yang di-ed lockharus merupakan jenis referensi. Jenis nilai tidak diperbolehkan.
  • Ekspresi await tidak dapat digunakan dalam cakupan lock pernyataan.
  • Pernyataan lock tidak dapat digunakan dengan async metode atau ekspresi lambda. Untuk kesalahan ini, Anda dapat mengganti jenis objek yang dikunci dengan jenis yang berbeda. Pernyataan ini lock menggunakan Monitor API.

Anda harus memperbarui kode Anda untuk mengikuti aturan lock pernyataan.

peringatan kunci

  • CS9216: Nilai jenis System.Threading.Lock yang dikonversi ke jenis yang berbeda akan menggunakan kemungkinan penguncian berbasis monitor yang tidak diinginkan dalam lock pernyataan.

Dimulai dengan C# 13, lock menghasilkan kode khusus ketika objek target adalah System.Threading.Lock objek. Pengkompilasi menghasilkan peringatan ini saat Anda menggunakan Lock objek, tetapi kode Anda mengonversi jenisnya menjadi sesuatu yang lain. Oleh karena itu, pengkompilasi menghasilkan kode penguncian umum, bukan kode penguncian khusus untuk jenisnya Lock . Contohnya:

C#
object lockObject = new System.Threading.Lock();

lock (lockObject) // CS9216
{
    // .. Your code
}

Anda harus memastikan variabel atau ekspresi mewakili jenis Lock objek.