我添加了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;
}
}
答案 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
类型中。