2010-02-23 29 views
4

首先,我想清楚我並不是指同時傳播一個TCP/IP流,而是希望獲取c#流的輸出並讓它轉到多個目標。同時播放一個.NET流

例如,如果我有一個FileStream(FS)和一個MemoryStream(MS)和FtpStream(FTPS)和不喜歡的東西

 ... 
    SuperStreamWriter ss = new SuperStreamWriter(fs, ms, ftps); 
    ss.Write(helloWorld, 0, helloWorld.length); 
} 
class SuperStreamWriter : Stream 
{ 
    Stream[] _s; 
    public SuperStreamWriter(params Stream[] s) 
    { 
     _s = s; 
    } 
    public override void Write(byte[] buffer, int offset, int count) 
    { 
     foreach (Stream s in _s) 
     { 
      s.Write(buffer, offset, count); 
     } 
    } 
//Other functions cut for example 
} 

世界,你好會推送到所有我三流的。有誰知道任何會給我類似的功能,我所描述的其他使用緩衝區上的foreach循環?另外,如果foreach循環是我唯一的/最好的選擇,那麼將foreach循環的每次迭代按原樣進行線程安全呢?

回答

1

我不知道任何會同時寫入多個流的東西,並且在任何情況下它都會在某個時刻歸結爲循環。

請注意,如果你用線程實現(這當然是從性能的角度有益的)去,要知道的Stream.BeginWrite的默認實現同步 - 派生類必須實現自己的異步邏輯。例如,FileStream實現了它自己的異步行爲,但MemoryStream沒有。