В моем коде сейчас у меня есть что-то вроде этого:
state.BytesRead += readPacket.Result;
if (state.BytesRead < state.Data.Length)
{
Read(state);
}
else
{
nextRead(state);
}
Однако я заметил, что первый оператор if никогда не выполняется.Я попытался сделать что-то вроде этого, чтобы увидеть, смогу ли я когда-нибудь запустить условное выражение:
tcpClient.SendBufferSize = 16;
tcpClient.ReceiveBufferSize = 16;
Но все равно оно никогда не запускается.Я отправляю большое количество данных (строки длиной более 1000 символов) между клиентом и сервером, но условие не выполняется.Похоже, он просто всегда читает все байты одновременно.
Это потому, что я использую Task.Factory.FromAsync
, и что он завершается только после чтения во всех байтах?Вот строка кода, которая вызывает фрагмент кода в верхней части моего поста:
Task<int>.Factory.FromAsync(state.Stream.BeginRead, state.Stream.EndRead, state.Data, state.BytesRead, state.Data.Length - state.BytesRead, state);
Я использовал асинхронные обратные вызовы до FromAsync, и все учебники для этого требовали проверки, все ли байты были прочитаны перед продолжениемсо следующим чтением.Это больше не нужно с FromAsync?Теперь это обрабатывается автоматически?