¿Cuál es la forma recomendada para agregar condiciones posteriores a los métodos asíncronos que devuelven Task<T>
?Contratos de código y asincronía
He leído la siguiente sugerencia:
http://social.msdn.microsoft.com/Forums/hu-HU/async/thread/52fc521c-473e-4bb2-a666-6c97a4dd3a39
El puesto sugiere la aplicación de cada método sincrónico, contraerla, y luego implementar una contraparte asíncrono como un simple envoltorio. Por desgracia, no veo esto como una solución viable (tal vez a través de mi propia incomprensión):
- El método asíncrono, aunque se supone que es una envoltura para el método de sincronización, se deja sin ningún contrato de código real y puede, por tanto, haz lo que quieras
- Es poco probable que las bases de datos que se comprometen con la asincronía implementen contrapartidas de sincronización para todo. Como resultado, la implementación de nuevos métodos que contienen
await
s en otros métodos asíncronos se ve forzado, por consiguiente, a ser asincrónico. Estos métodos son intrínsecamente asincrónicos y no se pueden convertir fácilmente a sincrónicos. No son simplemente envoltorios.
Incluso si invalidado este último punto diciendo que podríamos utilizar .Result
o .Wait()
en lugar de await
(lo que en realidad causar algunos SyncContext
s a un punto muerto, y no tendría que ser re-escrito en el método asíncrono de todos modos), Todavía estoy convencido del primer punto.
¿Hay alguna idea alternativa, o hay algo que me haya olvidado de los contratos de código y TPL?
Nadie dijo MVP no puede equivocarse. –