首页 > 后端开发 > C++ > 如何在C#的Main方法中正确调用异步方法?

如何在C#的Main方法中正确调用异步方法?

Patricia Arquette
发布: 2025-01-01 14:00:14
原创
222 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板