如何使用任务和异步方法创建从TcpClient连续读取数据的任务

时间:2012-06-07 12:04:03

标签: c# tcpclient task

我正在尝试从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;
}

0 个答案:

没有答案