У меня есть код синхронного чтения данных из потока. В бесконечном цикле идет прослушка:
while (alive_tcp)
{
byte[] messageLenBytes = ReceiveSync(4); // получили длину
int messageLen = BitConverter.ToInt32(messageLenBytes, 0); // сконвертировали в число
byte[] buffer = ReceiveSync(messageLen); // получили полное сообщение
StringBuilder builder = new StringBuilder();
builder.Append(Encoding.Unicode.GetString(buffer, 0, buffer.Length));
string message = builder.ToString();
}
Метод ReceiveSync:
private byte[] ReceiveSync(int nBytesExact)
{
byte[] buf = new byte[nBytesExact];
int readpos = 0;
while (readpos < nBytesExact)
{
try
{
int actuallyRead = stream.Read(buf, readpos, nBytesExact - readpos);
if (actuallyRead == 0)
throw new System.IO.EndOfStreamException();
readpos += actuallyRead;
}
catch
return buf;
}
}
Хочу сделать чтение асинхронным с помощью BeginRead, но никак не пойму как получить результат чтения отталкиваясь от моего кода. Нужен ли бесконечный цикл вообще?
Знаю что BeginRead устарел, но пишу под netframework 4.0. Может посоветуете другую реализацию.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей