对于Win 8和Win Phone 8,不能在便携式类库中使用await

我正在尝试在Visual Studio 2012中创建一个可移植类库,用于Windows 8商店应用程序和Windows Phone 8应用程序。

我收到以下错误:

‘await’要求’Windows.Foundation.IAsyncOperation’类型具有合适的GetAwaiter方法。 你错过了’系统’的使用指令吗?

在这行代码中:

StorageFolder guidesInstallFolder = await Package.Current.InstalledLocation.GetFolderAsync(guidesFolder); 

我的可移植类库针对Windows Framework 4.5,Windows Phone 8和.NET for Windows Store应用程序。

我没有在纯Windows Phone 8项目中获得此代码行的错误,我也没有在Windowsapp store应用中获取它,所以我不明白为什么它在我的PCL中不起作用。

GetAwaiter是WindowsRuntimeSystemExtensions类中的扩展方法,该方法位于System.Runtime.WindowsRuntime.dll中。 使用对象浏览器我可以看到这个DLL可以在.NET for Windows Store应用程序组件集和Windows Phone 8组件集中使用,但不能在.NET Portable子集中使用。 我只是不明白为什么它不会出现在Portable Subset中,如果它在我的目标平台上都可用。

您需要NuGet上的Async目标包,以便async / await适用于该目标组合。

更新:

试试这个(废话)代码片段来检查它是否正确使用async / await。

 public async void MyMethodAsync() { var req = WebRequest.Create(""); await req.GetRequestStreamAsync(); } 

但是,即使您遇到async/await不可用的第一个问题,您正在调用的Package API在PCL中也不可用。

我只是不明白为什么它不会出现在Portable Subset中,如果它在我的目标平台上都可用。

便携式子集不仅仅是常见的一切。 PCL的每个成员都是故意的,并且有很多成员不包括在内。

如果配置文件缺少您需要的内容,请求Microsoft添加它(通过MSConnect或旧的但仍然监控的PCL页面的Q&A选项卡)。