Dat klopt helemaal. "Get" (BookSleeve) retourneert een uitgestelde byte[]
. Je hebt Wait to get the daadwerkelijke byte[]
correct gebruikt , en gebruikte vervolgens een MemoryStream
over deze byte[]
om Deserialize
. te bellen via protobuf-net.
Allemaal goed.
Als je stappen duidelijk maakt die je lelijk vindt, kan ik misschien specifieker zijn, maar:
- BookSleeve is volledig async via
Task
, vandaar de noodzaak voor ofwelWait
ofContinueWith
om toegang te krijgen tot debyte[]
- protobuf-net is volledig op Stream gebaseerd, vandaar de noodzaak voor
MemoryStream
bovenop eenbyte[]
zitten
Als u een generieke hulpprogrammamethode toevoegt (misschien een uitbreidingsmethode), hoeft u deze natuurlijk maar één keer te schrijven.
En met de toevoeging als een wrapper-klasse (voor sommige tracking/sliding-expiry) en een L1-cache (Redis als L2), is dit vrijwel precies hoe we het gebruiken bij stackoverflow.
Eén opmerking:de verbinding is thread-safe en bedoeld om massaal te worden gedeeld; doe geen verbinding per bewerking.