Jaki jest zalecany sposób dodawania warunków do asynchronicznych metod, które zwracają Task<T>
?Umowy na kod i asynchrony
Czytałem następujące sugestie:
http://social.msdn.microsoft.com/Forums/hu-HU/async/thread/52fc521c-473e-4bb2-a666-6c97a4dd3a39
Post proponuje wdrożenie każdej metody jako synchroniczny, zamawiających go, a następnie wdrożenie odpowiednika asynchronicznej jako prosty owijki. Niestety nie widzę tego jako realne rozwiązanie (być może za pośrednictwem własnego niezrozumienia):
- Sposób asynchroniczny, choć zakłada się wrapper dla metody synchronizacji, zostanie pozostawiony bez jakiejkolwiek rzeczywistej umowy kodu i może dlatego rób, co chcesz.
- Codebases, które są zaangażowane w asynchronię, prawdopodobnie nie zaimplementują synchronizowanych odpowiedników we wszystkim. W rezultacie wdrożenie nowych metod zawierających inne asynchroniczne metody jest konsekwentnie zmuszane do asynchronizacji. Metody te są z natury asynchroniczne i nie można ich łatwo przekonwertować na synchroniczne. Nie są to po prostu opakowania.
Nawet jeśli unieważnione ten ostatni punkt, mówiąc, moglibyśmy użyć .Result
lub .Wait()
zamiast await
(który faktycznie będzie powodować pewne SyncContext
s do impasu, a musiałaby być ponownie napisane w sposób asynchroniczny i tak), Nadal jestem przekonany o pierwszym punkcie.
Czy są jakieś alternatywne pomysły, czy jest coś, co przeoczyłem w związku z umowami na kod i TPL?
Nikt nie powiedział MVP nie może się to źle. –