异步/等待:使方法异步

时间:2013-09-13 11:04:06

标签: c# asynchronous task async-await

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

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

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

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

2 个答案:

答案 0 :(得分:4)

只需将您的主要内容更改为:

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

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

只要您使用await关键字,就必须将周围的方法标记为async,而Main无法将其作为其他方法。 由于asyncCalculate方法仍会返回旧的Task对象,因此请随意使用“旧”方式处理它们:使用Result等待结果。当然这是一个阻塞操作 - 但没有理由在Main内部进行非阻塞,对吧? ;)

答案 1 :(得分: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;
    });
}