Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 29278|Jawab: 2

[Sumber] .net/c# Thread Thread Tangguhkan dan Lanjutkan solusi usang

[Salin tautan]
Diposting pada 17/05/2018 09.36.10 | | | |
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:








Mantan:C# mengirim pesan teks ke ponsel
Depan:SQL menghapus spasi dari data
 Tuan tanah| Diposting pada 17/05/2018 21.14.51 |
_event. Set(); adalah untuk melanjutkan utas
_event. Atur ulang(); adalah untuk menangguhkan benang
 Tuan tanah| Diposting pada 29/05/2018 14.58.49 |
Jika Anda mendapatkan ID utas saat ini, gunakan :

Thread.CurrentThread.ManagedThreadId.ToString() (disarankan)
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com