首先,我想明确一点,我不是指同时广播 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
}

Hello world 将被推送到我的所有三个流中。有没有人知道任何可以给我类似的功能的东西,我在缓冲区上使用 foreach 循环描述的其他功能?此外,如果 foreach 循环是我唯一/最好的选择,按原样线程化 foreach 循环的每次迭代是否安全?

最佳答案

我不知道任何会同时写入多个流的东西,在任何情况下它都会在某个时候归结为一个循环。

请注意,如果您使用线程实现(从性能角度来看这肯定是有益的),请注意 Stream.BeginWrite 的默认实现是同步的 - 派生类必须实现自己的异步逻辑。例如,FileStream 实现了它自己的异步行为,但 MemoryStream 没有。

关于c# - 同时广播 .NET 流,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2322442/

10-13 07:45
查看更多