Jak zrobić niezablokowane gniazdo odczytuje z Protobuf używając C #?

Powiedzmy, że chcę wykonywać niezablokowane odczyty z gniazda sieciowego. Mogę oczekiwać asynchronizacji, aż gniazdo odczyta x bajtów i wszystko będzie w porządku.

Ale jak połączyć to z deserializacją przez protobuf?

Czytanie obiektów ze strumienia musi być blokowane? to znaczy, jeśli strumień zawiera zbyt mało danych dla parsera, to musi zaistnieć jakieś blokowanie za kulisami, aby czytnik mógł pobrać wszystkie potrzebne bajty.

Myślę, że mogę użyć ograniczników długościprepix i odczytać pierwsze bajty, a następnie obliczyć, ile bajtów muszę pobrać minimum, zanim przeanalizuję, czy jest to właściwy sposób, aby to zrobić? na przykład jeśli mój bufor ma 500 bajtów, to zaczekaj na te 500 bajtów i przeanalizuj poprawkę długości, a jeśli długość jest większa niż 500, zaczekaj ponownie, aż wszystko zostanie odczytane.

Jaki jest idiomatyczny sposób na połączenie blokowania IO i analizowania protobuf?

(Używam teraz implementacji Jona Skeeta)http://code.google.com/p/protobuf-csharp-port/)

questionAnswers(2)

yourAnswerToTheQuestion