【问题标题】:c# 4.0, async CTP and async C# 5.0 are compatible?c# 4.0、async CTP 和 async C# 5.0 兼容吗?
【发布时间】:2012-11-27 06:06:42
【问题描述】:

我有一个使用 async CTP 库的应用程序能够使用 async/await 关键字,并且我知道 C# 的实际版本 5.0 默认具有此功能,并且并非所有 async 的确切版本CTP。我的意思是,例如在异步 CTP 中存在 TaskEx 而在 C# 5.0 中不存在,是 Task。

尽管有这些差异,我想知道异步方法返回的 Task 对象是否相同。

就我而言,我有一个用于存储库访问数据库的接口。目前这个存储库是由一个使用 C# 4.0 的类实现的,但它可以使用 asyc CTP 返回一个 Task 并使用 await keyowrd。但在未来,我想使用其他使用 C# 5.0 的类。

如果我的接口定义了一个返回任务的方法,我可以用使用 C# 4.0 的类和使用 C# 5.0 的类来实现这个接口吗?还是异步 CTP 和 C# 5.0 中的 Task 对象存在差异?

PD:我更正了 C# 的版本,我的意思是 5,0 而不是 C# 4.5。

PD2:似乎有了 VS2012,我可以使用 Microsoft.Bcl.Async 和 Microsoft.CompilerServices.AsyncTargetingPack 在目标是 .NET 4.0 的项目中使用 asyn/await 关键字。但我不知道它们之间有什么区别。

【问题讨论】:

  • 你的意思是C# 5.0
  • 是的,我的意思是 c# 5.0 和 .NET 4.5。

标签: c# async-await async-ctp


【解决方案1】:

返回的Task 类型相同。这种类型是在 .NET 4.0 中作为任务并行库的一部分引入的。

但是,如果我是你,我会将所有内容升级到 VS2012,将 Async CTP 替换为 Microsoft.Bcl.Async。底层编译器类型不同(并且相互不兼容),并且 Async CTP 中存在已知错误以及安装问题。

【讨论】:

  • Microsoft.Bcl.Async 和 Microsoft.CompilerServices.AsyncTargetingPack 有什么区别?我看到 ATP 是在 Bcl 之前发布的,但 Bcl 是测试版,而 ATP 是最终版本。
  • 我相信 ATP 是为 VS2012 更新异步 CTP 的第一次尝试。 Bcl.Async 是一种更全面的方法(支持更多平台);我希望 Bcl.Async 弃用 ATP。然而,AFAIK,微软并没有说明这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-03
  • 2011-08-12
  • 2015-10-26
  • 1970-01-01
  • 2013-02-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多