Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Harus Memanggil Kaedah Async dengan betul dari Kaedah Utama dalam C#?

Bagaimanakah Saya Harus Memanggil Kaedah Async dengan betul dari Kaedah Utama dalam C#?

Patricia Arquette
Lepaskan: 2025-01-01 14:00:14
asal
241 orang telah melayarinya

How Should I Correctly Call Async Methods from the Main Method in 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;
    }
}
Salin selepas log masuk

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();
    }
}
Salin selepas log masuk

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();
}
Salin selepas log masuk

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();
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan