Това е напълно правилно. „Get“ (BookSleeve) връща отложен byte[] . Правилно сте използвали Wait, за да получите действителния byte[] , след което използва MemoryStream над този byte[] за да извикате Deserialize чрез protobuf-net.
Всичко добре.
Ако изясните стъпките, които намирате за грозни, може би ще мога да бъда по-конкретен, но:
- BookSleeve е изцяло асинхронен чрез
Task, следователно необходимостта отWaitилиContinueWithза достъп доbyte[] - protobuf-net е изцяло базиран на поток, следователно необходимостта от
MemoryStreamза да седне на върха наbyte[]
Разбира се, ако добавите общ помощен метод (може би метод за разширение), трябва да го напишете само веднъж.
И с добавянето if клас на обвивка (за известно проследяване/плъзгане на изтичане) и L1 кеш (Redis като L2), това е почти точно как го използваме при stackoverflow.
Една забележка:връзката е безопасна за нишки и е предназначена за масово споделяне; не правете връзка на операция.