我想开始使用异步启用C#.NET 3.5SP1项目的代码。我的主要用例是异步调用WCF服务。
我们的WCF服务层完全基于接口,但这些接口方法签名意味着假定实现是同步执行的(例如SomeDataContract GetSomeDataContractByID(SomeID id);
。我想避免改造过多的接口以支持异步执行使用IAsyncResult
和BeginOperation
/ 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?
答案 0 :(得分:1)
Rx的API在3.5 vs 4.0(几乎)相同(差异是排队任务的额外IScheduler)。 Rx在这里是一个很好的选择,因为它可以很容易地让你以一种现实的方式存根WCF服务:
return Observable.Return(stubObject).Delay(TimeSpan.FromMilliseconds(750));