我正在尝试从TcpClient连续读取数据。 这是我的代码段。
var task = Task.Factory.StartNew(Read);
task.ContinueWith(ant =>
Console.WriteLine("Error: " + ant.Exception.Message),
TaskContinuationOptions.OnlyOnFaulted);
task.ContinueWith(ant =>
{
Log("Log my data");
});
void Read()
{
Task<int> readChunk = Task<int>.Factory.FromAsync(
_stream.BeginRead, _stream.EndRead,
data, bytesRead, data.Length - bytesRead, null,
TaskCreationOptions.AttachedToParent);
readChunk.ContinueWith(rt => { bytesRead = readChunk.Result; }, TaskContinuationOptions.NotOnFaulted
| TaskContinuationOptions.AttachedToParent);
}
这段代码工作正常,但流上可能有更多数据,所以我希望它再回来再读一遍。 启动另一个Read任务似乎不对。我不熟悉并行库的任务。通常我会写这样的东西:
while (true)
{
bytesRead += _stream.Read(data, bytesRead, chunkSize);
if(bytesRead == BytesExpected)
break;
}