-1

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

    static void Main(string[] args)
    {
        int result = await Calculate();

        Console.WriteLine(result);
        Console.ReadLine();
    }

    static async Task<int> Calculate()
    {
        return 1;
    }
4

2 回答 2

4

只需将您的主要更改为:

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

    Console.WriteLine(result);
    Console.ReadLine();
}

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

于 2013-09-13T11:10:22.960 回答
0

你可以这样做:

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;
    });
}
于 2013-09-13T11:07:35.740 回答