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 alboWait
lubContinueWith
aby uzyskać dostęp dobyte[]
- protobuf-net jest całkowicie oparty na strumieniu, stąd potrzeba
MemoryStream
siedzieć 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ę.