2

我正在下载文件。为此,我将文件分成几段。
每个段同时访问相同的输入流。所以错误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);

我的问题是如何同时从多个线程中读取。它应该是可能的,因为许多下载器具有并发段下载功能。如果我遗漏了什么,请告诉我。

4

1 回答 1

1

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

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 关键字通过获取给定对象的互斥锁、执行语句然后释放锁来将语句块标记为临界区。以下示例包含一个锁定语句MSDN

于 2013-10-12T14:38:05.617 回答