Это было бы значительно сложнее, чем для необработанных потоков.Для необработанных потоков любой объем данных может поступать асинхронно, и система просто передает вам буфер.Для чтения требуется кодировка символов, которая может превратить несколько байтов необработанных данных в один символ Unicode.Не то чтобы это было невозможно, библиотеки фреймворка просто не зашли так далеко, поэтому вам нужно будет выполнить эту работу самостоятельно.
(В зависимости от ваших потребностей, создание другого потока и синхронное выполнение операций наэто может упростить написание вашей программы. Обратите внимание, что масштабируемость обычно выше при использовании асинхронного начала / конца.)