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

Har*_*Len 8 c# async-await portable-class-library windows-phone-8 windows-store-apps

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

我收到以下错误:

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

在这行代码中:

StorageFolder guidesInstallFolder = await Package.Current.InstalledLocation.GetFolderAsync(guidesFolder);
Run Code Online (Sandbox Code Playgroud)

我的可移植类库针对适用于Windows应用商店的.NET Framework 4.5,Windows Phone 8和.NET.

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

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

Pau*_*tts 3

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

更新:

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

public async void MyMethodAsync()
{
    var req = WebRequest.Create("");
    await req.GetRequestStreamAsync();
}
Run Code Online (Sandbox Code Playgroud)

然而,即使您解决了async/await不可用的第一个问题, Package您调用的 API 在 PCL 中也不可用。