【问题标题】:Await operator can only be used within an Async method [duplicate]Await 运算符只能在 Async 方法中使用 [重复]
【发布时间】:2012-08-06 21:36:25
【问题描述】:

我正在尝试制作一个简单的程序来测试 Visual Studio 2012 中新的 .NET 异步功能。我通常使用 BackgroundWorkers 来异步运行耗时的代码,但有时相对简单(但昂贵)操作。新的 async 修饰符看起来很好用,但不幸的是我似乎无法进行简单的测试。

这是我在 C# 控制台应用程序中的代码:

static void Main(string[] args)
{
    string MarsResponse = await QueryRover();
    Console.WriteLine("Waiting for response from Mars...");
    Console.WriteLine(MarsResponse);
    Console.Read();
}

public static async Task<string> QueryRover()
{
    await Task.Delay(5000);
    return "Doin' good!";
}

我在 MSDN 上查看了一些示例,在我看来,这段代码应该可以工作,但是在包含“await QueryRover();”的行上出现了构建错误我是疯了还是发生了什么可疑的事情?

【问题讨论】:

    标签: c# .net build .net-4.5 async-await


    【解决方案1】:

    您只能在async 方法中使用await,以及Main cannot be async

    您必须使用自己的async 兼容上下文,在Main 方法中对返回的Task 调用Wait,或者忽略返回的Task 并阻止调用Read。请注意,Wait 会将任何异常都包装在 AggregateException 中。

    如果你想要一个好的介绍,请看我的async/await intro post

    【讨论】:

    • C# 7 现在也支持异步主方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 2021-05-02
    • 1970-01-01
    • 2019-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多