Dalam aplikasi berbilang benang, memahami aliran pelaksanaan adalah penting. Apabila menemui kata kunci 'menunggu' yang penuh teka-teki, pembangun sering bergelut dengan soalan: "Urutan manakah yang mengatur penyambungan semula kod selepas 'menunggu'?"
Pertimbangkan coretan kod berikut:
private void MyMethod() { Task task = MyAsyncMethod(); task.Wait(); } private async Task MyAsyncMethod() { //Code before await await MyOtherAsyncMethod(); //Code after await }
Dengan mengandaikan kod ini beroperasi dalam aplikasi satu-benang, ia menjadi membingungkan: bagaimana kod itu boleh selepas Laksanakan kata kunci 'menunggu' jika urutan dikunci oleh 'tugas.Tunggu()'?
Jawapannya terletak pada gelagat canggih kata kunci 'menunggu'. Ia menghasilkan kawalan kembali kepada pemanggil, membolehkan operasi tak segerak lain diteruskan. Penerusan tugas 'menunggu' (kod selepas 'menunggu') dijadualkan untuk dilaksanakan pada urutan yang mematuhi konteks penyegerakan semasa.
Dalam senario ini, jika fungsi 'MyMethod()' sedang dilaksanakan pada utas UI, kod selepas 'menunggu' juga akan dilaksanakan pada utas UI sekali 'MyOtherAsyncMethod()' selesai.
Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa urutan tepat yang digunakan untuk kesinambungan tidak dijamin. Dalam aplikasi berbilang benang, kesinambungan boleh dilaksanakan pada mana-mana benang yang tersedia dari kumpulan benang. Walau bagaimanapun, konteks penyegerakan memastikan bahawa kod selepas 'menunggu' dilaksanakan dengan cara yang konsisten berkenaan dengan urutan asal.
Dalam contoh yang diberikan, dengan memanggil 'task.Wait()', yang utama benang akan disekat selama-lamanya, menghalang penerusan daripada dilaksanakan. Untuk mengelakkan ini, operasi tak segerak harus ditunggu dengan betul tanpa menyekat utas utama.
Atas ialah kandungan terperinci Apakah Benang yang Melaksanakan Kod Selepas Kata Kunci `menunggu` dalam Aplikasi Berbilang Benang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!