对于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选项卡)。