Soalan:
Dalam aplikasi konsol satu benang, bagaimana bolehkah kod selepas kata kunci await dilaksanakan kerana benang dikunci oleh tugas. Tunggu()? Adakah urutan baharu mengambil alih, atau apakah urutan utama meninggalkan tugas.Tunggu() untuk menjalankan后续代码?
Jawapan:
Mekanisme Pelaksanaan :
Apabila kata kunci tunggu ditemui dalam kaedah tak segerak seperti MyAsyncMethod(), baki kod dalam kaedah itu dianggap sebagai kesinambungan. Kata kunci await secara berkesan menggantung pelaksanaan kaedah sehingga tugasan yang belum selesai (cth., MyOtherAsyncMethod()) selesai.
Sambungan Benang:
Secara lalai, penerusan kaedah tak segerak berjalan pada konteks penyegerakan yang sama seperti kod sebelum kata kunci tunggu. Dalam kes aplikasi UI, ini bermakna kod selepas menunggu akan dilaksanakan pada utas UI utama.
Senario dalam Apl Berjalur Tunggal:
Dalam aplikasi konsol satu benang, walau bagaimanapun, memanggil tugas. Tunggu() menyekat pelaksanaan utas utama. Oleh itu, kod kesinambungan selepas menunggu tidak boleh dilaksanakan kerana benang dikunci dengan berkesan.
Penyelesaian:
Untuk membenarkan kod sambungan berjalan dalam aplikasi satu-benang, anda mempunyai dua pilihan:
Atas ialah kandungan terperinci Bagaimanakah Pelaksanaan Kod Disambung semula Selepas `menunggu` dalam Aplikasi Berjalur Tunggal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!