Simulcast .NET Stream - PullRequest
       16

Simulcast .NET Stream

4 голосов
/ 24 февраля 2010

Прежде всего, я хочу пояснить, что я не имею в виду одновременную трансляцию потока TCP / IP, я хочу взять выходные данные потока c # и сделать так, чтобы он передавался нескольким адресам.

Например, если у меня есть 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 Ответ

1 голос
/ 24 февраля 2010

Я не знаю ничего, что одновременно записывало бы в несколько потоков, и это в любом случае сводилось бы к циклу в какой-то момент.безусловно, было бы полезно с точки зрения производительности), имейте в виду, что реализация Stream.BeginWrite по умолчанию - синхронный - производные классы должны реализовывать свою собственную асинхронную логику.Например, FileStream реализует свое собственное асинхронное поведение, а MemoryStream - нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...