2012-03-17 81 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