Rumah >pembangunan bahagian belakang >C++ >Tunggu vs Task.wait: Bilakah menyekat segerak membuat kebuntuan?
dan : perangkap deadlock await
Task.Wait
Dalam pengaturcaraan asynchronous, memahami perbezaan antara
sangat penting. Artikel ini akan menganalisis kes yang menggunakan untuk menyebabkan kunci mati. await
Task.Wait
Task.WaitAll
: Menyekat segerak
akan menyekat benang semasa secara serentak sehingga tugas selesai. Dalam kod contoh, menunggu 10 tugas yang dikembalikan dengan kaedah Task.Wait
untuk disiapkan. Ini akan menghalang benang dan menghalang mereka daripada melakukan operasi ikut -up.
: Menunggu Asynchronous Task.Wait
Task.WaitAll
Ros()
Kaedah yang dibenarkan akan mengembalikan tugas -tugas yang belum selesai kepada pemanggil sambil menunggu tugas yang tidak segerak. Apabila tugas selesai, kod selebihnya dalam kaedah dijadualkan dijadualkan akan diikuti.
adegan kunci mati await
Dalam kod contoh, kaedah
, dan kaedah await
memanggil kaedah asynchronous
untuk membuat satu siri operasi tak segerak. Ini berkesan menghalang tugas daripada melengkapkan dan melepaskan benang. Akibatnya, kaedah tidak akan keluar, mengakibatkan kunci mati. Operasi halangan dalam kod asynchronous
Get
Ia biasanya tidak disyorkan untuk menggunakan halangan dalam kod asynchronous. Apabila penyekatan berlaku, benang tidak dapat mengendalikan permintaan masuk, mengakibatkan penurunan prestasi dan mungkin menjadi kunci yang buntu. Task.WaitAll
Ros
Kesimpulan Foo
Bar
Perbezaan antara Get
pemahaman dan
Ia hanya boleh digunakan dalam adegan tertentu yang perlu disegerakkan. Dalam kebanyakan kes, adalah disyorkan untuk menggunakan kaedah "lengkap asynchronous" untuk menggunakan untuk mengekalkan asynchronous dan mencegah masalah menyekat dalam keseluruhan kod.
Atas ialah kandungan terperinci Tunggu vs Task.wait: Bilakah menyekat segerak membuat kebuntuan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!