2010-02-23 6 views
4

Tout d'abord, je tiens à préciser que je ne parle pas de la diffusion simultanée d'un flux TCP/IP, je veux prendre la sortie d'un flux C# et le faire aller à plusieurs destations.Simulcast a .NET Stream

Par exemple, si j'avais un FileStream (fs) et un MemoryStream (ms) et un FtpStream (FTPS) et a fait quelque chose comme

 ... 
    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 
} 

Bonjour tout le monde serait poussé à tous les trois de mes cours d'eau. Est-ce que quelqu'un sait quelque chose qui va me donner des fonctionnalités similaires à ce que je décris d'autres en utilisant cette boucle foreach sur le tampon? De même, si la boucle foreach est ma seule/meilleure option, est-il prudent d'insérer chaque itération de la boucle foreach telle quelle?

Répondre

1

Je ne connais pas de choses qui vont écrire simultanément dans plusieurs flux, et cela se résumerait à une boucle à tout moment.

Notez que si vous allez avec la mise en œuvre filetée (ce qui serait certainement bénéfique du point de vue de la performance), il faut savoir que la mise en œuvre par défaut de Stream.BeginWrite est synchrone - classes dérivées doivent mettre en œuvre leur propre logique asynchrone. FileStream implémente son propre comportement asynchrone, par exemple, mais pas MemoryStream.