async await task.run - not found



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. tasks ."任务不包含'运行'的定义。"我的WP7应用程序中的System.Threading.Tasks参考指向此位置:packagesMicrosoft.Bcl.1.0.16-rclibsl4- windowphone71 System.Threading.Tasks.dll

我添加了Microsoft.Bcl.1.0.16-rc通过NuGet完成迁移到VS2012。这是错的吗?以前我使用AsyncCtpLibrary_Phone,并被建议获得Microsoft.Bcl.Async将解决构建错误,如:

类型为"System.Threading.Tasks"。任务'存在于AsyncCtpLibrary_Phone.dll'>和'c:Program Files (x86)Reference AssembliesMicrosoftFrameworkWindowsPhonev8.0mscorlib.dll '中。添加Microsoft.Bcl.Async后,wp7应用程序正确构建并运行。

只是在尝试删除我在VS2012中原型化的NEW async代码之后,Task。出现运行问题。

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>

是否有额外的软件包需要我安装?

提前感谢,保罗

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

上次我检查的时候,异步CTP在Visual Studio 2012中不起作用,因为它是Visual Studio 2010的扩展。我担心你必须坚持VS 2010,只要你的目标是Windows Phone 7。

这里可能有更多有用的信息。

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

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

  • 删除Microsoft。Bcl和Microsoft.Bcl.Async(通过NuGet,无论你添加它们)
  • 删除异步CTP库(asyncctlibrary *.dll)
  • 确保编译失败找到类型
  • 添加Microsoft.Bcl.Async
  • 确保编译工作

我不明白WP7.1 vs 7.5,但由于编译器错误提到WP8参考,我认为你是好的。

NuGet中的Microsoft.Bcl.Async dll可以。

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

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

你应该使用:

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

最新更新