Совместима ли Rx под 3.5SP1 с Rx и TPL под 4.0? - PullRequest
1 голос
/ 22 июля 2011

Я хочу начать включать код нашего проекта C # .NET 3.5SP1 с асинхронностью.Мой основной вариант использования заключается в асинхронном вызове служб WCF.

Наш уровень службы WCF полностью основан на интерфейсе, но эти сигнатуры метода интерфейса подразумевают, что реализации должны выполняться синхронно (например, SomeDataContract GetSomeDataContractByID(SomeID id);.Я хотел бы избежать модернизации множества интерфейсов для поддержки асинхронного выполнения с асинхронным шаблоном .NET Framework IAsyncResult и BeginOperation / EndOperation. Мне нужен более управляемый способ сделать это.

Мы используемШаблоны T4 для генерации большого количества кода, поэтому я хотел бы иметь возможность генерировать асинхронную версию интерфейса на основе синхронной. Реализация асинхронного интерфейса будет вызывать службу WCF асинхронно, в идеале .TPL в NET 4.0 Task<T> для представления операции как задачи и ее возврата вызывающей стороне . Проблема в .NET 3.5SP1 не имеет такого TPL и, следовательно, не имеет приятного Task<T>.

Какие у меня есть варианты, учитывая совместимость между .NET 3.5SP1 и .NET4.0? Я готов отказаться от Task<T> (если я неправильно понимаю его назначение) в пользу чего-то еще, что является кросс-совместимым между двумя фреймворками, как, например, Rx?

1 Ответ

1 голос
/ 23 июля 2011

API Rx (почти) идентичен на 3.5 против 4.0 (разница заключается в дополнительном IScheduler, который ставит в очередь задачи).Rx - отличный выбор, потому что он легко позволит вам реалистично заглушить вызовы службы WCF:

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