Qual è il modo consigliato per aggiungere postcondizioni a metodi asincroni che restituiscono Task<T>
?Contratti di codice e asincronia
aver letto la seguente proposta:
http://social.msdn.microsoft.com/Forums/hu-HU/async/thread/52fc521c-473e-4bb2-a666-6c97a4dd3a39
Il post suggerisce attuazione ciascun metodo come sincrono, contraendo e quindi attuare una controparte asincrona come semplice involucro. Purtroppo non vedo questo come una soluzione praticabile (forse attraverso la mia incomprensione):
- Il metodo asincrono, anche se presume essere un wrapper per il metodo di sincronizzazione, viene lasciato senza alcun contratto di codice reale e può dunque fai come desidera
- È improbabile che i codebase impegnati in asincronia implementino per tutto le controparti di sincronizzazione. Di conseguenza, l'implementazione di nuovi metodi che contengono
await
su altri metodi asincroni sono di conseguenza forzati ad essere asincroni. Questi metodi sono intrinsecamente asincroni e non possono essere facilmente convertiti in sincrono. Non sono semplicemente involucri.
Anche se invalidato quest'ultimo punto dicendo potremmo usare .Result
o .Wait()
invece di await
(che sarebbe in realtà causare alcuni SyncContext
s a un punto morto, e avrebbe dovuto essere riscritto nel metodo asincrono in ogni caso), Sono ancora convinto del primo punto.
Ci sono idee alternative o c'è qualcosa che mi è sfuggito riguardo ai contratti di codice e TPL?
Nessuno ha detto MVP non può sbagliare. –