Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini menyediakan keterangan tambahan untuk dokumentasi referensi untuk API ini.
metode Wait(Object, Int32, Boolean)
Metode ini tidak kembali sampai memperoleh kembali kunci eksklusif pada parameter obj
.
Utas yang saat ini memiliki kunci pada objek yang ditentukan memanggil metode ini untuk melepaskan objek sehingga utas lain dapat mengaksesnya. Pemanggil diblokir saat menunggu untuk memperoleh kembali kunci. Metode ini dipanggil ketika penelepon perlu menunggu perubahan status yang akan terjadi sebagai akibat dari operasi utas lain.
Penghentian waktu memastikan bahwa utas ini saat ini tidak terhalang untuk waktu yang tidak terbatas jika utas lain melepaskan kunci tanpa terlebih dahulu memanggil metode Pulse atau PulseAll. Ini juga memindahkan utas ke antrean siap, melewati utas lain di depannya dalam antrean tunggu, sehingga dapat mengambil kembali kunci lebih cepat. Utas dapat menguji nilai pengembalian dari metode Wait untuk menentukan apakah ia memperoleh kembali kunci sebelum waktu habis. Utas dapat mengevaluasi kondisi yang menyebabkannya memasuki status menunggu, dan jika perlu, panggil metode Wait lagi.
Saat utas Wait
memanggil , utas melepaskan kunci dan memasuki antrean tunggu. Pada titik ini, utas berikutnya dalam antrean siap (jika ada) diizinkan untuk memegang kendali atas kunci. Utas yang menjalankan Wait
tetap berada dalam antrean tunggu sampai salah satu dari dua hal berikut terjadi: sebuah utas yang menahan kunci menjalankan PulseAll, atau utas tersebut merupakan urutan berikutnya dalam antrean dan utas yang menahan kunci menjalankan Pulse. Namun, jika millisecondsTimeout
berlalu sebelum utas lain memanggil metode Pulse atau PulseAll objek ini, utas asli dipindahkan ke antrean siap untuk mengembalikan kunci.
Nota
Jika Infinite ditentukan sebagai parameter millisecondsTimeout
, metode ini akan memblokir tanpa batas waktu kecuali jika pemegang kunci memanggil Pulse atau PulseAll. Jika millisecondsTimeout
sama dengan 0, utas yang memanggil Wait
melepaskan kunci dan kemudian segera memasuki antrean siap untuk mendapatkan kembali kunci.
Pemanggil mengeksekusi Wait
sekali, terlepas dari berapa kali Enter telah dipanggil untuk objek yang ditentukan. Secara konseptual, Wait
metode menyimpan berapa kali pemanggil dipanggil Enter pada objek dan memanggil Exit sebanyak yang diperlukan untuk sepenuhnya melepaskan objek terkunci. Pemanggil kemudian memblokir sambil menunggu untuk memperoleh kembali objek. Ketika penelepon memperoleh kembali kunci, sistem memanggil Enter sebanyak yang diperlukan untuk memulihkan jumlah tersimpan Enter untuk pemanggil. Memanggil Wait
hanya melepaskan kunci untuk objek yang ditentukan; jika penelepon adalah pemegang kunci pada objek lain, kunci-kunci ini tidak dilepaskan.
Nota
Objek yang disinkronkan menyimpan beberapa referensi, termasuk referensi ke utas yang saat ini memegang kunci, referensi ke antrean siap, yang berisi utas yang siap untuk mendapatkan kunci, dan referensi ke antrean tunggu, yang berisi utas yang menunggu pemberitahuan perubahan status objek.
Metode Pulse, PulseAll, dan Wait
harus dipanggil dari dalam blok kode yang disinkronkan.
Keterangan untuk metode Pulse menjelaskan apa yang terjadi jika Pulse dipanggil saat tidak ada utas yang sedang menunggu.
metode Wait(Object, TimeSpan, Boolean)
Metode ini tidak kembali sampai memperoleh kembali kunci eksklusif pada parameter obj
.
Utas yang saat ini memiliki kunci pada objek yang ditentukan memanggil metode ini untuk melepaskan objek sehingga utas lain dapat mengaksesnya. Pemanggil diblokir saat menunggu untuk memperoleh kembali kunci. Metode ini dipanggil ketika penelepon perlu menunggu perubahan status yang akan terjadi sebagai akibat dari operasi utas lain.
Penghentian waktu memastikan bahwa utas ini saat ini tidak terhalang untuk waktu yang tidak terbatas jika utas lain melepaskan kunci tanpa terlebih dahulu memanggil metode Pulse atau PulseAll. Ini juga memindahkan utas ke antrean siap, melewati utas lain di depannya dalam antrean tunggu, sehingga dapat mengambil kembali kunci lebih cepat. Utas dapat menguji nilai pengembalian dari metode Wait untuk menentukan apakah ia memperoleh kembali kunci sebelum waktu habis. Utas dapat mengevaluasi kondisi yang menyebabkannya memasuki status menunggu, dan jika perlu, panggil metode Wait lagi.
Saat utas Wait
memanggil , utas melepaskan kunci dan memasuki antrean tunggu. Pada titik ini, utas berikutnya dalam antrean siap (jika ada) diizinkan untuk memegang kendali atas kunci. Utas yang menjalankan Wait
tetap berada dalam antrean tunggu sampai salah satu dari dua hal berikut terjadi: sebuah utas yang menahan kunci menjalankan PulseAll, atau utas tersebut merupakan urutan berikutnya dalam antrean dan utas yang menahan kunci menjalankan Pulse. Namun, jika timeout
milidetik berlalu sebelum utas lain memanggil metode Pulse atau PulseAll objek ini, utas asli dipindahkan ke antrean siap untuk mendapatkan kunci kembali.
Nota
Jika TimeSpan yang mewakili -1 milidetik ditentukan untuk parameter timeout
, metode ini akan memblokir tanpa batas waktu kecuali jika pemegang kunci memanggil Pulse atau PulseAll. Jika timeout
adalah 0 milidetik, utas yang memanggil Wait
melepaskan kunci dan kemudian segera memasuki antrean siap untuk mendapatkan kembali kunci.
Pemanggil mengeksekusi Wait
sekali, terlepas dari berapa kali Enter telah dipanggil untuk objek yang ditentukan. Secara konseptual, Wait
metode menyimpan berapa kali pemanggil dipanggil Enter pada objek dan memanggil Exit sebanyak yang diperlukan untuk sepenuhnya melepaskan objek terkunci. Pemanggil kemudian memblokir sambil menunggu untuk memperoleh kembali objek. Ketika penelepon memperoleh kembali kunci, sistem memanggil Enter sebanyak yang diperlukan untuk memulihkan jumlah tersimpan Enter untuk pemanggil. Memanggil Wait
hanya melepaskan kunci untuk objek yang ditentukan; jika penelepon adalah pemegang kunci pada objek lain, kunci-kunci ini tidak dilepaskan.
Nota
Objek yang disinkronkan menyimpan beberapa referensi, termasuk referensi ke utas yang saat ini memegang kunci, referensi ke antrean siap, yang berisi utas yang siap untuk mendapatkan kunci, dan referensi ke antrean tunggu, yang berisi utas yang menunggu pemberitahuan perubahan status objek.
Metode Pulse, PulseAll, dan Wait
harus dipanggil dari dalam blok kode yang disinkronkan.
Keterangan untuk metode Pulse menjelaskan apa yang terjadi jika Pulse dipanggil saat tidak ada utas yang sedang menunggu.
Keluar dari konteks
ParameterexitContext
tidak berpengaruh kecuali metode dipanggil Wait dari dalam konteks terkelola nondefault. Ini bisa terjadi apabila thread Anda berada di dalam panggilan ke instance dari kelas yang berasal dari ContextBoundObject. Bahkan jika Anda saat ini menjalankan metode pada kelas yang tidak berasal dari ContextBoundObject, seperti String, Anda dapat berada dalam konteks nondefault jika ContextBoundObject ada di tumpukan Anda di domain aplikasi saat ini.
Saat kode Anda dijalankan dalam konteks nondefault, penetapan true
untuk exitContext
menyebabkan utas keluar dari konteks terkelola nondefault (yaitu, beralih ke konteks default) sebelum menjalankan metode Wait. Ini kembali ke konteks nondefault asli setelah panggilan ke Wait metode selesai.
Ini dapat berguna ketika kelas terikat konteks memiliki SynchronizationAttribute atribut yang diterapkan. Dalam hal ini, semua panggilan ke anggota kelas secara otomatis disinkronkan, dan domain sinkronisasi adalah seluruh isi kode untuk kelas. Jika kode dalam tumpukan panggilan anggota memanggil metode Wait dan menentukan true
untuk exitContext
, maka utas keluar dari domain sinkronisasi, memungkinkan utas yang diblokir pada panggilan ke anggota objek mana pun untuk dilanjutkan. Ketika metode Wait mengembalikan, utas yang melakukan panggilan harus menunggu untuk masuk kembali ke domain sinkronisasi.