异步/等待:使方法异步

本文关键字:异步 方法 等待 | 更新日期: 2023-09-27 18:31:07

我正在尝试做一个简单的示例,但我什至没有得到基础知识。这段代码有什么问题?想象一下Calculate()需要几秒钟。

    static void Main(string[] args)
    {
        int result = await Calculate();
        Console.WriteLine(result);
        Console.ReadLine();
    }
    static async Task<int> Calculate()
    {
        return 1;
    }

异步/等待:使方法异步

只需将您的 main 更改为:

static void Main(string[] args)
{
    int result = Calculate().Result;
    Console.WriteLine(result);
    Console.ReadLine();
}

一旦您使用await关键字,就必须将周围的方法标记为async - 正如其他人所指出的那样 - 对于Main是不可能的。由于像Calculate这样的async方法仍然返回良好的旧Task对象,因此请随意使用"旧"的方式来处理它们:使用Result等待结果。当然,这是一个阻塞操作 - 但没有理由在Main内部不阻塞,对吧?;)

你可以这样做:

static void Main()
{
    WrapMain();
}
static async void WrapMain()
{
    int result = await Calculate();
    Console.WriteLine(result);
    Console.ReadLine();
}
static async Task<int> Calculate()
{
    return await Task.Run(() =>
    {
        return 1;
    });
}