异步等待关键字出错

时间:2012-03-02 20:25:51

标签: c# async-ctp async-await

我添加了AsyncCtpLibrary v.3。从异步网页中获取了一些示例代码。将它包裹在TestFixture中以便进行游戏。

我收到错误:有什么想法吗?

错误1 - 类,结构或接口成员声明中的标记'void'无效

错误2 - ;预期

代码:

 [TestFixture]
public class AsyncTests
{
    [Test]
    public async void AsyncRunCpu()
    {
        Console.WriteLine("On the UI thread.");

        int result = await TaskEx.Run(
            () =>
                {
                    Console.WriteLine("Starting CPU-intensive work on background thread...");
                    int work = DoCpuIntensiveWork();
                    Console.WriteLine("Done with CPU-intensive work!");
                    return work;
                });

        Console.WriteLine("Back on the UI thread.  Result is {0}.", result);
    }

    public int DoCpuIntensiveWork()
    {
        // Simulate some CPU-bound work on the background thread:
        Thread.Sleep(5000);
        return 123;
    }
}

2 个答案:

答案 0 :(得分:4)

你不能简单地将.dll添加到项目中并让它工作:Async CTP扩展了C#语言的语法,“普通”编译器不理解新的关键字,即使所需的运行时程序集也是如此存在。您需要使用官方安装程序安装它。 (注意:首先卸载自上一个Service Pack以来的所有Visual Studio更新,否则安装将不会成功。您可以在之后重新安装更新。)

答案 1 :(得分:0)

我认为它应该是:

[Test]
public async Task AsyncRunCpu()
{
    // ...
}

据我所知,具有void返回类型的异步方法在某种程度上是特殊的 - 想知道为什么编译器不会对这种情况发出警告......

顺便说一下,您可以在.NET4.0中使用async/await,只需在项目中添加对Microsoft.BCL.Async的引用即可。唯一的区别是某些Task相关功能存在于TaskEx类型中。