1

我添加了 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;
    }
}
4

2 回答 2

4

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

于 2012-03-02T20:37:32.817 回答
0

我认为应该是:

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

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

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

于 2014-01-17T06:55:04.203 回答