To jest całkowicie poprawne. "Get" (BookSleeve) zwraca odroczony byte[] . Prawidłowo użyłeś Wait, aby uzyskać rzeczywisty byte[] , a następnie użył MemoryStream nad tym byte[] wywołać Deserialize przez protobuf-net.
Wszystko dobrze.
Jeśli wyjaśnisz wszelkie kroki, które uważasz za brzydkie, być może będę mógł być bardziej szczegółowy, ale:
- BookSleeve jest całkowicie asynchroniczny za pomocą
Task, stąd potrzeba alboWaitlubContinueWithaby uzyskać dostęp dobyte[] - protobuf-net jest całkowicie oparty na strumieniu, stąd potrzeba
MemoryStreamsiedzieć na szczyciebyte[]
Oczywiście, jeśli dodasz ogólną metodę narzędziową (być może metodę rozszerzającą), wystarczy napisać ją tylko raz.
A z dodatkiem klasy opakowującej (dla niektórych wygasania śledzenia/przesuwania) i pamięci podręcznej L1 (Redis jako L2), jest to prawie dokładnie sposób, w jaki używamy go przy przepełnieniu stosu.
Jedna uwaga:połączenie jest bezpieczne wątkowo i przeznaczone do masowego udostępniania; nie rób połączenia na operację.