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à diWaitoContinueWithper accedere albyte[] - protobuf-net è interamente basato su Stream, da qui la necessità di
MemoryStreamsedersi 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.