С одной стороны, мне сказали, что исключения в C # «дороги», но с другой, я застрял на том, как это реализовать.
Моя проблема заключается в следующем: я делаю Stream
производный, который обертывает NetworkStream
. Теперь проблема, с которой я сталкиваюсь, такова: Read(byte[] buffer, int offset, int count)
. Из Stream
документов для функции:
Возвращает:
... или ноль (0), если достигнут конец потока.
Проблема в том, что в протоколе, который я реализую, удаленная сторона может отправлять токен "конца записи" или токен "пожалуйста, ответьте". Очевидно, что если это происходит в начале Read()
, это вызывает проблемы, так как мне нужно вернуться из функции, и я ничего не читал, поэтому мне нужно вернуть 0, что означает, что поток завершен, но это не ... EndOfRecordException
или подобное оправдано в этом случае? И в этом случае, если он будет брошен всегда, когда встречается этот токен (в начале вызова Read()
и убедитесь, что эти токены всегда в начале, возвращаясь рано), так что есть некоторый образец того, как токены должны быть обработаны.
Редактировать: Эти токены обычно стоят 3-10 раз в секунду. Самое большее, я не ожидал бы больше 25 секунд в секунду.