Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Memanggil Kaedah Async daripada Kaedah Utama Segerak dalam C#?

Bagaimanakah Saya Memanggil Kaedah Async daripada Kaedah Utama Segerak dalam C#?

DDD
DDDasal
2024-12-31 02:29:08979semak imbas

How Do I Call an Async Method from a Synchronous Main Method in C#?

Memanggil Kaedah Async dari Utama: Panduan Komprehensif

Pengenalan

Persoalannya timbul apabila pembangun perlu menggunakan kaedah tak segerak daripada konteks segerak tradisional seperti kaedah Utama. Keadaan ini sering muncul apabila meneroka alam pengaturcaraan async dalam C#.

Masalah

Memandangkan kaedah tak segerak berikut:

public class test
{
    public async Task Go()
    {
        // ... various async operations
    }
}

The dilema timbul apabila cuba memanggil Pergi dari kaedah Utama, entri segerak program titik.

Penyelesaian

Dalam C# 7.1 dan versi yang lebih baru, memanggil kaedah async daripada Utama adalah mudah:

static async Task Main(string[] args)
{
    test t = new test();
    await t.Go();
    Console.WriteLine("finished");
    Console.ReadKey();
}

Kod ini memastikan bahawa Operasi tak segerak Go selesai sebelum program tamat.

Untuk versi C# sebelum 7.1, pendekatan berbeza diperlukan:

static void Main(string[] args)
{
    test t = new test();
    t.Go().Wait();
    Console.WriteLine("finished");
    Console.ReadKey();
}

Memanggil Tunggu() menyekat urutan semasa sehingga operasi tak segerak Go berakhir.

Faedah Kaedah Async

Menghapuskan panggilan balik, yang boleh menjadikan kod rumit dan sukar untuk dikekalkan, adalah kelebihan utama pengaturcaraan tak segerak menggunakan kata kunci async. Ia membolehkan aliran pelaksanaan yang bersih dan berurutan sambil membenarkan operasi lain diteruskan secara serentak.

Atas ialah kandungan terperinci Bagaimanakah Saya Memanggil Kaedah Async daripada Kaedah Utama Segerak dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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