ThreadState Enum
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Menentukan status eksekusi Thread.
Enumerasi ini mendukung kombinasi bitwise dari nilai yang termasuk di dalamnya.
public enum class ThreadState
[System.Flags]
public enum ThreadState
[System.Flags]
[System.Runtime.InteropServices.ComVisible(true)]
public enum ThreadState
[System.Flags]
[System.Serializable]
public enum ThreadState
[System.Flags]
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public enum ThreadState
[<System.Flags>]
type ThreadState =
[<System.Flags>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type ThreadState =
[<System.Flags>]
[<System.Serializable>]
type ThreadState =
[<System.Flags>]
[<System.Runtime.InteropServices.ComVisible(true)>]
[<System.Serializable>]
type ThreadState =
Public Enum ThreadState
- Warisan
- Atribut
Bidang
| Nama | Nilai | Deskripsi |
|---|---|---|
| Running | 0 | Utas telah dimulai dan belum dihentikan. |
| StopRequested | 1 | Utas diminta untuk berhenti. Ini hanya untuk penggunaan internal. |
| SuspendRequested | 2 | Utas diminta untuk ditangguhkan. |
| Background | 4 | Utas sedang dijalankan sebagai utas latar belakang, dibandingkan dengan utas latar depan. Status ini dikontrol dengan mengatur IsBackground properti . |
| Unstarted | 8 | Metode Start() belum dipanggil pada utas. |
| Stopped | 16 | Utas telah berhenti. |
| WaitSleepJoin | 32 | Utas diblokir. Ini bisa menjadi hasil dari panggilan Sleep(Int32) atau Join(), dari meminta kunci - misalnya, dengan memanggil Enter(Object) atau Wait(Object, Int32, Boolean) - atau menunggu pada objek sinkronisasi utas seperti ManualResetEvent. |
| Suspended | 64 | Utas telah ditangguhkan. |
| AbortRequested | 128 | Metode Abort(Object) ini telah dipanggil pada utas, tetapi utas belum menerima tertunda ThreadAbortException yang akan mencoba mengakhirinya. |
| Aborted | 256 | Status utas termasuk AbortRequested dan utas sekarang mati, tetapi statusnya belum berubah menjadi Stopped. |
Keterangan
Enumerasi ThreadState mendefinisikan serangkaian semua kemungkinan status eksekusi untuk utas. Ini hanya menarik dalam beberapa skenario penelusuran kesalahan. Kode Anda tidak boleh menggunakan status utas untuk menyinkronkan aktivitas utas.
Setelah utas dibuat, utas berada di setidaknya salah satu status sampai berakhir. Utas yang dibuat dalam runtime bahasa umum awalnya dalam Unstarted status, sementara utas eksternal, atau tidak terkelola yang masuk ke runtime sudah dalam Running status. Utas ditransisikan dari Unstarted status ke status Running dengan memanggil Thread.Start. Setelah utas meninggalkan status sebagai hasil panggilan ke , utas Unstarted tidak pernah dapat kembali ke statusUnstarted.Start
Utas dapat berada dalam lebih dari satu status pada waktu tertentu. Misalnya, jika utas diblokir pada panggilan ke Monitor.Wait, dan panggilan utas lain pada utas yang diblokir, utas Thread.Abort yang diblokir akan berada di status WaitSleepJoin dan AbortRequested pada saat yang sama. Dalam hal ini, segera setelah utas kembali dari panggilan ke Monitor.Wait atau terganggu, itu akan menerima ThreadAbortException untuk mulai membatalkan. Tidak semua kombinasi nilai valid; misalnya, utas ThreadState tidak dapat berada di status Aborted dan Unstarted .
Sebuah utas tidak pernah bisa meninggalkan status Stopped .
Penting
Ada dua enumerasi status utas: System.Threading.ThreadState dan System.Diagnostics.ThreadState.
Tabel berikut ini memperlihatkan tindakan yang menyebabkan perubahan status.
| Action | ThreadState |
|---|---|
| Utas dibuat dalam runtime bahasa umum. | Unstarted |
| Utas lain memanggil metode pada utas Thread.Start baru, dan panggilan kembali. Metode Start tidak kembali sampai utas baru mulai berjalan. Tidak ada cara untuk mengetahui pada titik mana utas baru akan mulai berjalan, selama panggilan ke Start. |
Running |
| Utas memanggil Sleep | WaitSleepJoin |
| Utas Monitor.Wait memanggil pada objek lain. | WaitSleepJoin |
| Utas memanggil utas Join lain. | WaitSleepJoin |
| Panggilan utas lain Interrupt | Running |
| Panggilan utas lain Suspend | SuspendRequested |
| Utas merespons Suspend permintaan. | Suspended |
| Panggilan utas lain Resume | Running |
| Panggilan utas lain Abort | AbortRequested |
| Utas merespons Abort permintaan. | Stopped |
| Utas dihentikan. | Stopped |
Selain status yang disebutkan di atas, ada juga Background status, yang menunjukkan apakah utas berjalan di latar belakang atau latar depan. Untuk informasi selengkapnya, lihat Latar Depan dan Latar Belakang Thread.
Properti Thread.ThreadState utas menyediakan status utas saat ini. Aplikasi harus menggunakan masker bit untuk menentukan apakah utas berjalan. Karena nilai untuk Running adalah nol (0), uji apakah utas berjalan dengan kode berikut:
(myThread.ThreadState & (ThreadState.Stopped | ThreadState.Unstarted)) == 0
(myThread.ThreadState And (ThreadState.Stopped Or ThreadState.Unstarted)) = 0