Rumah >pembangunan bahagian belakang >C++ >Tunggu vs Task.wait: Kenapa menggunakan Task.wait menyebabkan kebuntuan?
await
: akar kebuntuan Task.Wait
perbezaan dalam pengaturcaraan asynchronous sedikit penting. Artikel ini meneroka perbezaan antara kedua -dua dan menganalisis adegan kebuntuan umum. await
Task.Wait
Task.wait: Menyekat segerak
Tutup benang panggilan serentak sehingga tugas selesai. Ini pada dasarnya menggantung benang dan menunggu tugas itu dilaksanakan.
Task.Wait
pelaksanaan kaedah semasa yang tidak segerak. Keadaan kaedah itu ditangkap, dan tugas yang belum selesai kembali kepada pemanggil. Apabila ekspresi menunggu selesai, baki bahagian kaedah dijadualkan akan dikendalikan secara berterusan. adegan kunci mati
await
Memandangkan contoh kod berikut, di mana ralat menggunakan
Dalam kod ini, kaedah
menghalang benang semasa, menunggu semua tugas dalam koleksi untuk diselesaikan. Walau bagaimanapun, setiap kaedah mengandungi ungkapan yang menggantung pelaksanaannya. Task.Wait
<code>Task.WaitAll(Enumerable.Range(0, 10).Select(x => Ros()).ToArray());</code>, ungkapan
dalam tugas tidak dapat diselesaikan. Ini menjana kunci mati kerana tugas itu tidak boleh terus dilaksanakan kecuali panggilan dipanggil untuk melepaskan halangannya; Task.WaitAll
Ros()
Mengapa blok menunggu untuk mengelakkan kunci mati await
Menggunakan halangan menunggu, seperti Task.WaitAll
atau kunci, ia tidak akan menyebabkan kunci mati di tempat kejadian ini, kerana ia tidak akan menghalang tugas daripada dilaksanakan pada benang yang berasingan. Halangan menunggu hanya pelaksanaan kaedah panggilan kelewatan, yang membolehkan tugas diteruskan dan akhirnya selesai. await
Untuk mengelakkan kunci mati, pastikan anda memahami perbezaan antara
dan. Secara umumnya, Thread.Sleep
sentiasa digunakan dalam kod asynchronous untuk memastikan benang panggilan dikekalkan.
Atas ialah kandungan terperinci Tunggu vs Task.wait: Kenapa menggunakan Task.wait menyebabkan kebuntuan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!