C'est tout à fait exact. "Get" (BookSleeve) renvoie un byte[]
différé . Vous avez correctement utilisé Wait pour obtenir le byte[]
réel , puis utilisé un MemoryStream
sur ce byte[]
pour appeler Deserialize
via protobuf-net.
Tout va bien.
Si vous précisez les étapes que vous trouvez laide, je pourrais peut-être être plus précis, mais :
- BookSleeve est entièrement asynchrone via
Task
, d'où la nécessité soit deWait
ouContinueWith
pour accéder aubyte[]
- protobuf-net est entièrement basé sur Stream, d'où le besoin de
MemoryStream
s'asseoir au-dessus d'unbyte[]
Bien sûr, si vous ajoutez une méthode utilitaire générique (peut-être une méthode d'extension), vous n'avez besoin de l'écrire qu'une seule fois.
Et avec l'ajout d'une classe wrapper (pour certains tracking/sliding-expiry) et d'un cache L1 (Redis comme L2), c'est à peu près exactement comment nous l'utilisons à stackoverflow.
Une remarque :la connexion est thread-safe et destinée à être massivement partagée; ne faites pas de connexion par opération.