Eso es completamente correcto. "Get" (BookSleeve) devuelve un byte[] diferido . Ha utilizado correctamente Esperar para obtener el byte[] real , luego usó un MemoryStream sobre este byte[] para llamar a Deserialize vía protobuf-net.
Todo bien.
Si deja en claro cualquier paso que encuentre feo, podría ser más específico, pero:
- BookSleeve es completamente asíncrono a través de
Task, de ahí la necesidad deWaitoContinueWithpara acceder albyte[] - protobuf-net está completamente basado en Stream, de ahí la necesidad de
MemoryStreampara sentarse encima de unbyte[]
Por supuesto, si agrega un método de utilidad genérico (tal vez un método de extensión), solo necesita escribirlo una vez.
Y con la adición de una clase contenedora (para algún seguimiento/caducidad deslizante) y un caché L1 (Redis como L2), así es como lo usamos en stackoverflow.
Una nota:la conexión es segura para subprocesos y está destinada a ser compartida de forma masiva; no haga una conexión por operación.