从同一个流中多次读取抛出Stream不支持并发IO读取或写入操作

时间:2013-10-12 14:35:58

标签: c# .net stream download

我正在下载文件。为此,我将文件分成了几段。
每个段同时访问相同的输入流。 因此,错误Stream does not support concurrent IO read or write operations发生在Stream.Read()方法中。
我的代码是

Stream InputStream = response.GetResponseStream(); //where response is HttpWebResponse
//Following Read is called for each segment
InputStream.Read(buffer, offset, bytesToRead);

我的问题是如何同时从多个线程中读取。应该有尽可能多的下载器具有并发段下载功能。如果我遗漏了某些内容,请告诉我。

1 个答案:

答案 0 :(得分:1)

您可以使用lock一次允许单个线程读取。

Stream InputStream = null;

lock(InputStream)
{
  InputStream = response.GetResponseStream(); //where response is HttpWebResponse
  //Following Read is called for each segment
  InputStream.Read(buffer, offset, bytesToRead);
}
  

lock关键字将语句块标记为临界区   获取给定对象的互斥锁,执行a   声明,然后释放锁。以下示例包括   锁定语句MSDN