首頁 > 後端開發 > C++ > 如何在C#的Main方法中正確呼叫非同步方法?

如何在C#的Main方法中正確呼叫非同步方法?

Patricia Arquette
發布: 2025-01-01 14:00:14
原創
227 人瀏覽過

How Should I Correctly Call Async Methods from the Main Method in C#?

直接從Main 呼叫非同步方法:綜合指南

C# 中引入的重要增強功能之一是async/await 模式,它簡化了異步操作的開發。然而,直接從 Main() 呼叫非同步方法可能有點棘手。

要理解這個問題,請考慮以下程式碼範例:

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;
    }
}
登入後複製

如果您嘗試呼叫Go 方法從Main() 開始,如下所示:

class Program
{
    static void Main(string[] args)
    {
        test t = new test();
        t.Go().GetAwaiter().OnCompleted(() =>
        {
            Console.WriteLine("finished");
        });
        Console.ReadKey();
    }
}
登入後複製

您可能會遇到死鎖情況,從而阻止任何輸出出現在screen.

解決方案在於將Main()修改為異步方法本身。對於從 7.1 開始的 C# 版本:

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

此方法允許非同步操作無縫運行,而不會阻塞主執行緒。

如果您使用的是早期版本的C# ,可以使用下面的程式碼:

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

這裡,Wait()方法明確阻塞主線程,直到Go方法

請記住,透過採用非同步/等待模式,您可以避免回呼的複雜性,從而為非同步操作提供更乾淨、更易於維護的程式碼。

以上是如何在C#的Main方法中正確呼叫非同步方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板