Det är helt korrekt. "Get" (BookSleeve) returnerar en uppskjuten byte[] . Du har använt Vänta korrekt för att få den faktiska byte[] , använde sedan en MemoryStream över denna byte[] för att anropa Deserialize via protobuf-net.
Allt bra.
Om du klargör några steg som du tycker är fula kanske jag kan vara mer specifik, men:
- BookSleeve är helt asynkront via
Task, därav behovet av antingenWaitellerContinueWithför att komma åtbyte[] - protobuf-net är helt strömbaserat, därav behovet av
MemoryStreamatt sitta ovanpå enbyte[]
Om du lägger till en generisk verktygsmetod (kanske en förlängningsmetod) behöver du naturligtvis bara skriva den en gång.
Och med tillägget om en omslagsklass (för viss spårning/sliding-utgång) och en L1-cache (Redis som L2), är det här ganska exakt hur vi använder det vid stackoverflow.
En anmärkning:anslutningen är trådsäker och avsedd att delas massivt; gör inte en anslutning per operation.