Каков рекомендуемый способ добавления постусловий к методам async, которые возвращают Task<T>
?
Я прочитал следующее предложение:
http://social.msdn.microsoft.com/Forums/hu-HU/async/thread/52fc521c-473e-4bb2-a666-6c97a4dd3a39
Сообщение предлагает реализовать каждый метод как синхронный, сжимающий его, а затем реализовать асинхронный экземпляр в качестве простой оболочки. К сожалению, я не рассматриваю это как приемлемое решение (возможно, из-за моего собственного недоразумения):
- Асинхронный метод, хотя предполагается, что он является оболочкой для метода синхронизации, остается без какого-либо реального кодового контракта и поэтому может делать то, что он хочет.
- Кодовые базы, которые привязаны к асинхронности, вряд ли реализуют синхронизирующие копии для всего. В результате внедрение новых методов, содержащих
await
для других методов async, следовательно, должно быть асинхронным. Эти методы по сути являются асинхронными и не могут быть легко преобразованы в синхронные. Они не просто обертки.
Даже если мы отменили последнее утверждение, сказав, что мы могли бы использовать .Result
или .Wait()
вместо await
(что фактически вызвало бы тупик в некотором SyncContext
, и его нужно было бы переписать в async метод в любом случае), я все еще уверен в первом вопросе.
Есть ли альтернативные идеи или есть что-то, что я пропустил о кодовых контрактах и TPL?