Apabila bekerja dengan pengaturcaraan tak segerak dalam C#, pembangun sering menghadapi persoalan sama ada untuk menunggu panggilan kaedah async dalam yang lain kaedah async atau hanya kembalikan tugas. Walaupun kedua-dua pendekatan mungkin kelihatan sah, setiap pilihan mempunyai akibat berbeza yang memerlukan pertimbangan.
Pilihan A: Mengembalikan Tugas Secara Terus
Dalam pendekatan ini, kaedah async kembali secara langsung tugas yang diperoleh daripada panggilan async bersarang. Ini sama seperti menulis:
Task FooAsync() { return BazAsync(); // Option A }
Akibat:
Pilihan B: Menunggu Tugas
Semasa menunggu tugasan, kaedah async dengan jelas menunggu panggilan async bersarang selesai. Ini ditulis sebagai:
async Task BarAsync() { await BazAsync(); // Option B }
Akibat:
Memilih Pilihan yang Tepat
Pilihan antara kembali atau menunggu bergantung pada senario dan keperluan tertentu.
Jika kaedah melaksanakan sejumlah kecil kerja segerak dan memanggil hanya satu kaedah async, mengembalikan tugas (Pilihan A) boleh menjadi pendekatan yang lebih cekap. Walau bagaimanapun, jika kaedah perlu melakukan kerja tak segerak tambahan atau mengendalikan pengecualian secara tak segerak, maka menunggu tugasan (Pilihan B) ialah pilihan yang sesuai.
Perlu ambil perhatian bahawa kaedah yang diisytiharkan sebagai tak segerak tidak boleh mengembalikan tugasan secara langsung. Jika kaedah mesti mengembalikan tugasan, ia sendiri mesti diisytiharkan sebagai tak segerak.
Contoh Praktikal
Pertimbangkan coretan kod berikut:
// Version 1: Task BarAsync() { // No need to gronkle yet... return BazAsync(); } // Oops, for version 2 I need to do some more work... async Task BarAsync() { int gronkle = await GronkleAsync(); // Do something with gronkle // Now we have to await BazAsync as we're now in an async method await BazAsync(); }
Pada mulanya, kaedah BarAsync tidak perlu menunggu BazAsync, jadi ia mengembalikan tugas secara langsung. Walau bagaimanapun, apabila kerja tak segerak tambahan diperkenalkan, BarAsync terpaksa ditukar kepada kaedah tak segerak dan menunggu BazAsync.
Dengan memahami akibat pemulangan atau menunggu dalam kaedah tak segerak, pembangun boleh melaksanakan kod tak segerak dengan berkesan dan mengelakkan kemungkinan perangkap .
Atas ialah kandungan terperinci Perlukah Saya Menunggu atau Mengembalikan Tugasan dalam Kaedah Async C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!