Thread.Suspend tidak digunakan lagi. Silakan gunakan kelas lain di System.Threading, seperti Monitor, Mutex, Event, dan Semaphore, untuk menyinkronkan Thread atau melindungi sumber daya. Login hyperlink terlihat. Thread.Resume tidak digunakan lagi. Silakan gunakan kelas lain di System.Threading, seperti Monitor, Mutex, Event, dan Semaphore, untuk menyinkronkan Thread atau melindungi sumber daya. Login hyperlink terlihat. Jika utas ingin berhenti sejenak atau melanjutkan, saya telah menggunakan dua metode Tangguhkan dan Lanjutkan sebelumnya, dan menggunakan kedua metode ini untuk mengoperasikan utas, yang sebenarnya bermasalah, dan saya tidak mempedulikannya pada saat itu, jadi mari kita keluarkan dan pelajari hari ini!
Apa masalah dengan menggunakan dua metode di atas untuk menangguhkan dan melanjutkan utas?
Misalnya, jika kita memanggil metode Suspend untuk menangguhkan utas, dan kemudian segera memanggil metode Resume untuk melanjutkan utas yang ditangguhkan, maka mungkin ada masalah.
Karena, setelah Anda memanggil metode Suspend untuk menangguhkan utas, utas mungkin tidak segera ditangguhkan, di sini dibutuhkan waktu pemrosesan, saat ini, Anda segera memanggil metode Lanjutkan untuk melanjutkan utas yang ditangguhkan, dan program akan segera hang!
Penjelasan Microsoft adalah:
Jangan gunakan metode Tangguhkan dan Lanjutkan untuk menyinkronkan aktivitas utas. Apakah ada cara untuk mengetahui kode apa itu saat Anda menjeda eksekusi utas? Jika Anda menahan kunci selama evaluasi hak istimewa keamanan, utas lain di utas yang ditangguhkan di AppDomain dapat diblokir. Jika Anda menangguhkan utas lain di AppDomain saat menjalankan konstruktor kelas, upaya untuk menggunakan kelas akan diblokir. Kebuntuan dapat dengan mudah terjadi.
// Ringkasan: Lanjutkan utas yang ditangguhkan. // Anomali: T:System.Threading.ThreadStateException: Utas tidak dimulai, mati, atau tidak dalam status tertunda. // T:System.Security.SecurityException: Pemanggil tidak memiliki System.Security.Permissions.SecurityPermission yang tepat. [Usang("Thread.Resume tidak digunakan lagi. Silakan gunakan kelas lain di System.Threading, seperti Monitor, Mutex, Event, dan Semaphore, untuk menyinkronkan Thread atau melindungi sumber daya. Login hyperlink terlihat.", salah)] [KeamananAmanKritis] publik batal Resume(); Bagaimana cara mengatasi masalah ini?
ManualResetEvent
Beri tahu satu atau beberapa utas tunggu bahwa suatu peristiwa telah terjadi. Jenis seperti itu tidak dapat diwariskan.
Kode pengujiannya adalah sebagai berikut:
|