Я хочу начать включать код нашего проекта 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?