首先我要明确一点,我指的不是联播 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/