2013-10-12 147 views
2

我正在下載文件。爲此,我將文件分成多個段。
每段同時訪問相同的輸入流。 因此,錯誤Stream does not support concurrent IO read or write operations發生在Stream.Read()方法中。
我的代碼是從同一個數據流中讀取多個數據流不支持併發IO讀取或寫入操作

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

我的問題是如何從多個線程讀取同一處應time.It是儘可能多的下載者有併發段下載facility.Also讓我知道如果我失去了一些東西。

回答

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); 
} 

鎖關鍵字標誌着一個語句塊作爲一個關鍵部分通過 獲得用於給定對象的互斥鎖,執行 語句,然後釋放該鎖。以下示例包含 鎖定語句MSDN

+1

那麼下載多段的優點就會丟失,不是嗎? – userda

+0

它不會丟失,鎖將允許線程排隊,並且一旦一個線程離開鎖,將允許排隊的線程訪問代碼段。 – Adil

相關問題