У меня есть этот код, который работает, но это полный беспорядок. Есть ли более эффективный способ прочитать логическое значение из потока асинхронно, которое не включает проверку каждого персонажа таким ручным способом? < /P>
internal override async ValueTask DeserializeAsync(TextReader textReader, CancellationToken cancellationToken = default)
{
char[] buffer = new char[1];
Memory memoryBuffer = new Memory(buffer);
cancellationToken.ThrowIfCancellationRequested();
//read leading whitespace (why is there no str >> std::ws???)
do if (await textReader.ReadAsync(memoryBuffer, cancellationToken) < 1)
throw new EndOfStreamException();
while (char.IsWhiteSpace(buffer[0]));
//handle true case (not expecting uppercase)
if (buffer[0] == 't')
{
char[] buffer2 = new char[3];
Memory memoryBuffer2 = new Memory(buffer2);
cancellationToken.ThrowIfCancellationRequested();
if (await textReader.ReadAsync(memoryBuffer2, cancellationToken) < 3)
throw new EndOfStreamException();
else if (buffer2[0] == 'r' && buffer2[1] == 'u' && buffer2[2] == 'e')
{
Value = true;
return;
}
}
//false case
else if (buffer[0] == 'f')
{
char[] buffer2 = new char[4];
Memory memoryBuffer2 = new Memory(buffer2);
cancellationToken.ThrowIfCancellationRequested();
if (await textReader.ReadAsync(memoryBuffer2, cancellationToken) < 4)
throw new EndOfStreamException();
else if (buffer2[0] == 'a' && buffer2[1] == 'l' && buffer2[2] == 's' && buffer2[3] == 'e')
{
Value = false;
return;
}
}//neither true nor false
else
throw new InvalidDataException();
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... chronously
Как прочитать логическую ценность из потока как Textreader Asynchrony? ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение