Rumah >pembangunan bahagian belakang >C++ >Kenapa saya tidak boleh menggunakan pengubah 'Async' pada kaedah utama aplikasi konsol?

Kenapa saya tidak boleh menggunakan pengubah 'Async' pada kaedah utama aplikasi konsol?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-02-01 16:51:09737semak imbas

Why Can't I Use the 'Async' Modifier on the Main Method of a Console App?

Kaedah

Konsol App dan pengubah Main: Penyelesaian async

Cabaran: pengaturcaraan asynchronous, menggunakan kata kunci , tidak disokong secara langsung dalam kaedah async aplikasi konsol lama. Keterbatasan ini menghalang pelaksanaan kod asynchronous secara langsung dalam titik masuk aplikasi. Main

Resolusi:

Beberapa penyelesaian yang membolehkan operasi tak segerak dalam kaedah

, bergantung kepada persekitaran pembangunan anda: Main

1. Visual Studio 2017 Update 3 dan kemudian:

Versi Modern Visual Studio (2017 Update 3 dan kemudian) Sokongan langsung

async kaedah. Cukup tukar jenis pulangan kaedah Main anda ke Main atau Task: Task<T>

<code class="language-csharp">class Program
{
    static async Task Main(string[] args)
    {
        Bootstrapper bs = new Bootstrapper();
        var list = await bs.GetList();
    }
}</code>

2. Menyekat thread utama (untuk studio visual yang lebih tua):

Jika anda menggunakan versi Visual Studio yang lebih tua, anda boleh melaksanakan kod tak segerak dengan secara eksplisit menyekat benang utama sehingga operasi tak segerak selesai:

<code class="language-csharp">class Program
{
    static void Main(string[] args)
    {
        MainAsync(args).GetAwaiter().GetResult();
    }

    static async Task MainAsync(string[] args)
    {
        Bootstrapper bs = new Bootstrapper();
        var list = await bs.GetList();
    }
}</code>
Pendekatan ini memanggil kaedah penolong

(async) dan menggunakan MainAsync untuk menunggu siapnya. GetAwaiter().GetResult()

3. Memanfaatkan konteks asynchronous (mis., Asyncex):

Untuk aliran kawalan asynchronous yang lebih mantap, pertimbangkan untuk menggunakan perpustakaan seperti

. Ini memberikan konteks tak segerak untuk gelung utama anda: Nito.AsyncEx

<code class="language-csharp">using Nito.AsyncEx;

class Program
{
    static void Main(string[] args)
    {
        AsyncContext.Run(() => MainAsync(args));
    }

    static async void MainAsync(string[] args)
    {
        Bootstrapper bs = new Bootstrapper();
        var list = await bs.GetList();
    }
}</code>

menguruskan pelaksanaan tak segerak dalam konteks yang berdedikasi. AsyncContext.Run

Dengan menggunakan salah satu kaedah ini, anda boleh berjaya mengintegrasikan pengaturcaraan tak segerak ke dalam kaedah

aplikasi konsol anda, meningkatkan kecekapan dan respons. Main

Atas ialah kandungan terperinci Kenapa saya tidak boleh menggunakan pengubah 'Async' pada kaedah utama aplikasi konsol?. 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