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 ofwelWaitofContinueWithom toegang te krijgen tot debyte[] - protobuf-net is volledig op Stream gebaseerd, vandaar de noodzaak voor
MemoryStreambovenop 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.