C# 相当于';s全双工/重叠?

C# 相当于';s全双工/重叠?,c#,memorystream,C#,Memorystream,我正在做一个测试台客户机/服务器系统(dotnet 4.0),它最终将有两个组件通过传输介质中的流进行通信,但目前这两个组件通过单个内存流进行通信。以前从未使用过,我假设我可以同时写作和阅读。但是,因为只有一个“游标”,所以我无法从流中读取,直到它完成写入,并且我可以将seek()返回到零 命名管道支持全双工操作,但前提是我将一个对象设置为服务器,并将另一个对象连接到服务器上——这不是我现在想要做的事情 我可以通过创建一个字节缓冲区并让两个MemoryStream实例指向该缓冲区来获得我想要的结

我正在做一个测试台客户机/服务器系统(dotnet 4.0),它最终将有两个组件通过传输介质中的流进行通信,但目前这两个组件通过单个内存流进行通信。以前从未使用过,我假设我可以同时写作和阅读。但是,因为只有一个“游标”,所以我无法从流中读取,直到它完成写入,并且我可以将seek()返回到零

命名管道支持全双工操作,但前提是我将一个对象设置为服务器,并将另一个对象连接到服务器上——这不是我现在想要做的事情

我可以通过创建一个字节缓冲区并让两个MemoryStream实例指向该缓冲区来获得我想要的结果,但是当我到达缓冲区的末尾并得到一个异常时,就会发生这种情况,因为内存流无法扩展

我可能可以通过创建一个文件而不是数组并拥有两个FileStream实例来实现这一点,但这样做似乎有点混乱。如果继续运行,将导致磁盘已满,因为没有任何内容会修剪已读取的数据


我要找的是一个不支持seek()或position的流,它维护单独的读写指针,缓冲写入它的数据,并在读取后丢弃它。感觉就像是重新发明轮子,让我自己转动。肯定已经有这样的东西了吗?

我不知道有这样的东西存在。听起来你想要一个环形缓冲区。嗯。对我来说,这听起来更像是一个队列。设置“测试床客户机/服务器系统”最糟糕的事情就是不选择客户机和服务器。这很重要。管道、套接字或WCF是显而易见的选择。您可能对my感兴趣,它具有您描述的行为。请注意,它是一个固定大小的循环缓冲区,因此如果您的写入程序严重超出了您的读卡器,则写入程序将暂停。