"async" 类型或命名空间找不到。

19

我试图在一个WPF应用程序中使用以下方法.NET Framework 4 Client Profile,但是我收到了这个错误:

找不到类型或命名空间名称“async”

我正在使用

using System.Threading.Tasks;

有什么想法可能出了问题吗?提前致谢

private async Task SumPageSizesAsync()
{
    HttpClient client = new HttpClient();
    Task<byte[]> getContentsTask = client.GetByteArrayAsync(url);
    byte[] urlContents = await getContentsTask;   
}

我正在使用VS 2010


确保你没有漏掉返回类型:public static async void <<<<< - Andrew
3个回答

26

有两件事情需要注意:

  • 你需要使用 C# 5 编译器,例如 VS2012。如果你使用的是 VS2010,则无法使用 async。根据错误消息,我怀疑你使用了错误的编译器版本。
  • 你需要使用 Microsoft.Bcl.Async NuGet 包 来引入适用于 .NET 4 的相应库支持。

1
如果我使用VS 2010,这个链接是否合适?http://www.microsoft.com/en-us/download/details.aspx?id=9983 - GibboK
3
@GibboK: 好吧,虽然这是一个包含已知漏洞的 CTP 版本,但这仍然是可能的。你应该升级到 VS2012 或者接受无法使用 async/await 的事实。我真的不建议使用 CTP 版本。 - Jon Skeet
关于支持async/await的Visual Studio和.NET版本的信息:http://openstacknetsdk.org/docs/html/32cc6156-3b31-4450-b209-b55fcfc0a210.htm - Sam Harwell
我不确定这是否是VS 2013语法高亮/检查的问题,还是它本来就是正确的。但是,如果您在VS2013中创建一个没有返回类型的异步方法(当然是错误的!),则在编译和高亮时也会出现此错误。实际上,问题在于您的方法没有返回类型。 - KidCode
@KidCode:这可能是两者都有可能,因为 async 是一个有效的类型名称,所以您可能正在尝试编写一个返回该类型的方法。 - Jon Skeet

24
在我的情况下,缺少返回类型导致了这个错误消息,代码如下:
private async button1_Click(object sender, EventArgs e)

应该是

private async void button1_Click(object sender, EventArgs e)

14
如果你正在使用Visual Studio 2012+,并且在红色波浪线出现后就停止了输入,那么直到你完成方法签名之前,你可能会在async关键字上看到这个错误消息。
请完成方法签名,确保没有其他编译器问题,并等待一秒钟左右,让Visual Studio赶上来。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接