Контракты кода и асинхронность

Каков рекомендуемый способ добавления постусловий в асинхронные методы, возвращающие Задача ?

Я прочитал следующее предложение:

http://social.msdn.microsoft.com/Forums/hu-HU/async/thread/52fc521c-473e-4bb2- a666-6c97a4dd3a39

В сообщении предлагается реализовать каждый метод как синхронный, заключить его в контракт, а затем реализовать асинхронный аналог в виде простой оболочки. К сожалению, я не вижу в этом работоспособного решения (возможно, из-за моего собственного недоразумения):

  1. Асинхронный метод, хотя и считается оболочкой для метода синхронизации, остается без какого-либо реального контракта кода и поэтому может делать то, что он пожелания.
  2. Кодовые базы, ориентированные на асинхронность, вряд ли будут реализовывать аналоги синхронизации для всего.В результате реализация новых методов, содержащих await , в других асинхронных методах, следовательно, принудительно должна быть асинхронной. Эти методы по своей сути асинхронны и не могут быть легко преобразованы в синхронные. Это не просто обертки.

Даже если мы опровергли последний пункт, сказав, что можем использовать .Result или .Wait () вместо await (что на самом деле вызовет некоторые SyncContext в тупик, и его все равно придется переписывать в методе async), я все еще убежден в первом пункте.

Есть ли какие-нибудь альтернативные идеи или есть что-то, что я пропустил по поводу кодовых контрактов и TPL?

17
задан Lawrence Wagerfield 6 February 2012 в 19:02
поделиться