0
在我的代码,现在我有这样的事情:在完成之前,Task.Factory.FromAsync(BeginRead,EndRead)是否读取完整的数据块?
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不再需要这个吗?它现在会自动处理吗?
你能解释为什么条件不被运行吗?即使发送大量数据并将缓冲区大小设置为非常小的数字,条件也不会运行。它甚至有必要吗? –