Rx低于3.5SP1是否与Rx和TPL在4.0之下向前兼容?

时间:2011-07-22 16:49:19

标签: c# .net-3.5 .net-4.0 system.reactive task-parallel-library

我想开始使用异步启用C#.NET 3.5SP1项目的代码。我的主要用例是异步调用WCF服务。

我们的WCF服务层完全基于接口,但这些接口方法签名意味着假定实现是同步执行的(例如SomeDataContract GetSomeDataContractByID(SomeID id);。我想避免改造过多的接口以支持异步执行使用IAsyncResultBeginOperation / EndOperation的.NET框架异步模式。我想要一种更易于管理的方法来执行此操作。

我们使用T4模板生成大量代码,因此我希望能够基于同步模型生成异步版本的接口。异步接口的实现将异步调用WCF服务,理想情况下使用.NET 4.0的TPL Task<T>将操作表示为任务并将其返回给调用者。问题是.NET 3.5SP1没有这样的TPL,因此没有好Task<T>

我有什么选择,请记住.NET 3.5SP1和.NET 4.0之间的兼容性?我愿意放弃Task<T>(如果我误解了它的目的)支持两个框架之间交叉兼容的其他东西,比如Rx?

1 个答案:

答案 0 :(得分:1)

Rx的API在3.5 vs 4.0(几乎)相同(差异是排队任务的额外IScheduler)。 Rx在这里是一个很好的选择,因为它可以很容易地让你以一种现实的方式存根WCF服务:

return Observable.Return(stubObject).Delay(TimeSpan.FromMilliseconds(750));