2010-02-23 6 views
4

먼저 TCP/IP 스트림을 시뮬레이트하는 것을 언급하지 않는다는 것을 명확히하고 싶습니다. C# 스트림의 출력을 가져 와서 여러 대상으로 보내고 싶습니다. Simulcast a .NET Stream

예를 들어 내가하여 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은 구현하지 않습니다.