2012-03-17 46 views
8

我使用NetworkStream.BeginReadSocket异步读取。使用BufferedStream封装NetworkStream进行异步读取是否安全?

但是,如果您实际上用BufferedStream包装网络流,速度会更快。

我的问题:NetworkStream.BeginRead内部调用Socket.BeginReceive和整个堆栈的异步IO(Windows上的CompletionPorts等)。 BufferedStream在中间时是否也发生同样的情况?

+0

Reflector中是否有任何可见/可理解的内容? – remio 2012-03-18 20:57:10

+0

它没有实现异步调用(BufferedStream),所以我不知道它是否会以NetworkStream或基本流的形式进行异步调用,但不使用IOCP – pablo 2012-03-18 21:00:01

回答

2

BufferedStream不支持高效的异步IO。它使用从Stream类继承的默认实现。它将在线程池上发出同步IO。所以你不会得到IO完成端口。你需要自己做这个工作。如果您使用的是C#5,则可以重新使用BufferedStream的实现,并尝试使用异步并等待它。

+0

这是基于什么?看看BufferedStream源代码,看起来异步操作可以通过调用底层流的异步操作来正确实现吗? – 2014-09-20 10:14:43

+0

它基于.NET 4.0。在4.5上,这不再是事实。好点子。 – usr 2014-09-20 15:20:46

+0

啊,谢谢澄清。 – 2014-09-20 19:24:17