Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Harus Memanggil Kaedah Async dengan betul dari Kaedah Utama dalam C#?
Memanggil Kaedah Async Terus dari Utama: Panduan Komprehensif
Salah satu peningkatan ketara yang diperkenalkan dalam C# ialah corak async/menunggu, yang memudahkan pembangunan operasi tak segerak. Walau bagaimanapun, memanggil kaedah async terus daripada Main() boleh menjadi agak rumit.
Untuk memahami isu ini, pertimbangkan contoh kod berikut:
public class test { public async Task Go() { await PrintAnswerToLife(); Console.WriteLine("done"); } public async Task PrintAnswerToLife() { int answer = await GetAnswerToLife(); Console.WriteLine(answer); } public async Task<int> GetAnswerToLife() { await Task.Delay(5000); int answer = 21 * 2; return answer; } }
Jika anda cuba memanggil kaedah Go daripada Main() seperti ini:
class Program { static void Main(string[] args) { test t = new test(); t.Go().GetAwaiter().OnCompleted(() => { Console.WriteLine("finished"); }); Console.ReadKey(); } }
Anda mungkin menghadapi situasi kebuntuan, menghalang sebarang output daripada muncul pada skrin.
Penyelesaian terletak pada mengubah suai Main() untuk menjadi kaedah tak segerak itu sendiri. Untuk versi C# dari 7.1 dan seterusnya:
static async Task Main(string[] args) { test t = new test(); await t.Go(); Console.WriteLine("finished"); Console.ReadKey(); }
Pendekatan ini membolehkan operasi tak segerak berjalan dengan lancar tanpa sebarang sekatan pada utas utama.
Sekiranya anda menggunakan versi C# yang lebih awal , anda boleh menggunakan kod berikut:
static void Main(string[] args) { test t = new test(); t.Go().Wait(); Console.WriteLine("finished"); Console.ReadKey(); }
Di sini, kaedah Wait() secara eksplisit menyekat urutan utama sehingga kaedah Go selesai.
Ingat bahawa dengan menerima corak tak segerak/menunggu, anda boleh mengelakkan kerumitan panggilan balik, menghasilkan kod yang lebih bersih dan lebih boleh diselenggara untuk operasi tak segerak.
Atas ialah kandungan terperinci Bagaimanakah Saya Harus Memanggil Kaedah Async dengan betul dari Kaedah Utama dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!