8

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

我收到以下错误:

'await' 要求类型 'Windows.Foundation.IAsyncOperation' 具有合适的 GetAwaiter 方法。您是否缺少“系统”的使用指令?

在这行代码:

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

My Portable Class Library 针对 .NET Framework 4.5、Windows Phone 8 和 .NET for Windows Store 应用程序。

在纯 Windows Phone 8 项目中,这行代码我没有收到此错误,我也没有在 Windows Store 应用程序中收到此错误,所以我不明白为什么它在我的 PCL 中不起作用。

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

4

2 回答 2

3

您需要NuGet 上的 Async 目标包,以便 async/await 为该目标组合工作。

更新:

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

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

但是,即使您解决了第一个不可用的问题,async/awaitPackage调用的 API 在 PCL 中也不可用。

于 2012-12-15T23:06:13.670 回答
1

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

可移植子集不仅仅是常见的一切。PCL的每个成员都故意在那里,并且有很多成员没有被包括在内。

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

于 2012-12-15T23:00:43.950 回答