async等待task.run - 找不到

时间:2013-03-30 22:09:18

标签: windows-phone-7 asynchronous visual-studio-2012 async-await

VS2012,C#,XAML,Windows Phone7应用程序(刚刚从Win7 / VS2010迁移)。

我刚刚将我的WP7应用程序迁移到Win8 / VS2012。 (我提到这个以防下面的问题可能表明我可能指向一个不正确的DLL。)应用程序迁移得很好。我正在添加一些我在VS2012中制作原型的额外异步处理,并且我被VS标记为以下内容不正确:

var _Token = await Task.Run(() => (Token)_Serializer.ReadObject(_Response.GetResponseStream()));

VS说“System.Threading.Tasks.Task不包含'Run'的定义。”我的WP7应用程序中的System.Threading.Tasks参考指向此位置:\ packages \ Microsoft.Bcl.1.0.16-rc \ lib \ sl4-windowsphone71 \ System.Threading.Tasks.dll

我通过NuGet添加了Microsoft.Bcl.1.0.16-rc以完成向VS2012的迁移。这是不正确的?以前我使用的是AsyncCtpLibrary_Phone,并建议获取Microsoft.Bcl.Async可以解决构建错误,例如:

  

AsyncCtpLibrary_Phone.dll'>和'c:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework \ WindowsPhone \ v8.0 \ mscorlib.dll中存在'System.Threading.Tasks.Task'类型。   添加Microsoft.Bcl.Async后,wp7应用程序正确构建并运行。

只有在尝试删除我在VS2012中制作原型的新异步代码后,才会出现Task.Run问题。

app.config包含以下条目:

<dependentAssembly bcl:name="System.Threading.Tasks">
    <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-1.5.11.0" newVersion="1.5.11.0" />
</dependentAssembly>

我需要安装额外的软件包吗?

提前致谢, 保罗

4 个答案:

答案 0 :(得分:15)

在Microsoft.Bcl.Async中,就像在异步CTP中一样,Run方法位于TaskEx类型而不是Task

答案 1 :(得分:0)

我最后一次检查时,Async CTP在Visual Studio 2012中不起作用,因为它是Visual Studio 2010的扩展。我担心只要您定位Windows,就必须坚持使用VS 2010电话7。

可能更有用的信息here

答案 2 :(得分:0)

我认为问题是您仍然需要包含相同类型的旧异步CTP程序集(根据编译器错误)。这些是使用VS2010时的正确参考,但现在需要删除AFAICT。

恕我直言,我会做这些步骤:

  • 删除Microsoft.Bcl和Microsoft.Bcl.Async(通过NuGet,但是你添加了它们)
  • 删除Async CTP库(AsyncCtpLibrary * .dll)
  • 确保编译无法找到类型
  • 通过NuGet
  • 添加Microsoft.Bcl.Async
  • 确保编译工作

我不明白WP7.1 vs 7.5,但由于编译器错误提到了WP8 ref,我认为你没问题。

答案 3 :(得分:-1)

NuGet的Microsoft.Bcl.Async dll很好。

问题在于语法不同。不要使用:

await Task.Run(() => ...);

你应该使用:

await Task.Factory.StartNew(() => ...);