1
前一段時間,我在vb.net寫了一些基本的Http網絡服務器。 我試圖避免阻塞IO,所以基本上我爲所有當前連接做了一個輪詢線程。SslStream:使用檢查數據可用來執行輪詢IO
While True
For Each oNetworkstream In lstNetworkstream
If oNetworkstream.DataAvailable Then
'Read from stream
End If
Next
End While
因此,無論何時一個連接有一些新的數據,我可以讀取它,否則立即檢查下一個連接。
現在我用https擴展web服務器。 因此,我使用.Net SslStream類。 我想採用同樣的原則(一個輪詢線程讀取所有流)
由於沒有.DataAvailable財產,我想寬度。長度> 0, 但是這給NotSupportedException異常(該流不支持尋道操作)
Dim oSslStream As New SslStream(oStream, False)
oSslStream.AuthenticateAsServer(moCertificateKeyPair)
MsgBox(oSslStream.Length)
所以,我怎麼能確定是否有一定的解密流有可用的數據,而不會阻塞線程?
我的印象是ReadAsync會在後臺使用它自己的線程來等待數據。那麼,最後,這會讓我有幾十個線程?我錯了嗎? – jnv
異步IO根本不使用線程。 IO只是一個內核數據結構。如果它使用的是線程,則整個IAsyncResult模型都是無用的。 – usr