Questo è del tutto corretto. "Ottieni" (BookSleeve) restituisce un byte[]
posticipato . Hai utilizzato correttamente Attendi per ottenere il byte[]
effettivo , quindi ha utilizzato un MemoryStream
su questo byte[]
per chiamare Deserialize
tramite protobuf-net.
Tutto bene.
Se chiarisci tutti i passaggi che ritieni brutti, potrei essere più specifico, ma:
- BookSleeve è completamente asincrono tramite
Task
, da qui la necessità diWait
oContinueWith
per accedere albyte[]
- protobuf-net è interamente basato su Stream, da qui la necessità di
MemoryStream
sedersi sopra unbyte[]
Ovviamente, se aggiungi un metodo di utilità generico (magari un metodo di estensione) devi scriverlo solo una volta.
E con l'aggiunta di una classe wrapper (per alcuni tracking/sliding-expiry) e una cache L1 (Redis come L2), questo è praticamente esattamente il modo in cui lo usiamo in stackoverflow.
Una nota:la connessione è thread-safe e pensata per essere condivisa in modo massiccio; non eseguire una connessione per operazione.