Memahami Gelagat Benang Selepas Kata Kunci Menunggu
Dalam pengaturcaraan asynchronous, kata kunci await memainkan peranan penting dalam mengurus urutan dan memastikan pelaksanaan yang cekap. Walau bagaimanapun, ia boleh mengelirukan untuk memahami bagaimana kod itu diteruskan selepas menghadapi menunggu. Artikel ini bertujuan untuk menjelaskan perkara ini dengan penerokaan terperinci.
Pertimbangkan coretan kod berikut sebagai contoh:
private async Task MyAsyncMethod() { // Code before await await MyOtherAsyncMethod(); // Code after await } private void MyMethod() { Task task = MyAsyncMethod(); task.Wait(); }
Apabila kata kunci tunggu ditemui dalam MyAsyncMethod, kawalan dikembalikan kepada MyMethod. Ini kerana MyAsyncMethod ditandakan sebagai async. Walau bagaimanapun, sejak task.Wait() kemudian dipanggil, utas yang melaksanakan MyMethod disekat, seolah-olah menghalang pelaksanaan kod selepas menunggu.
Adakah Benang Baharu Melaksanakan Kod Selepas menunggu?
Jawapannya: mungkin. Tingkah laku bergantung pada pelaksanaan konteks penyegerakan yang "semasa" pada masa ungkapan menunggu dinilai.
Dalam contoh yang disediakan, jika kod berjalan pada urutan UI, kesinambungan (kod selepas menunggu) akan dilaksanakan pada utas UI yang sama. Sebaliknya, jika kod dijalankan pada benang-pool, kesinambungan boleh dilaksanakan pada mana-mana benang-pool yang tersedia.
Mengelakkan Sekatan Benang
Jika matlamatnya adalah untuk melaksanakan kod selepas menunggu serta-merta, adalah penting untuk mengelak daripada menyekat benang dengan tugas.Tunggu() atau tugas.Keputusan. Sebaliknya, pertimbangkan pilihan lain seperti mendaftarkan panggilan balik atau menggunakan tugas menunggu itu sendiri.
Mengawal Perkaitan Benang
Untuk senario di mana perkaitan benang khusus diperlukan untuk kesinambungan, Kaedah ConfigureAwait boleh digunakan. Dengan menghantar palsu kepada ConfigureAwait, kesinambungan boleh diarahkan secara eksplisit untuk dijalankan pada konteks urutan yang berbeza.
Sumber Tambahan
Untuk mendalami pemahaman anda tentang tingkah laku utas dengan menunggu, rujuk sumber berikut:
Atas ialah kandungan terperinci Apa yang Berlaku pada Thread Selepas Kata Kunci `menunggu` dalam Pengaturcaraan Async C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!