前段时间我在vb.net上写了一些基本的Http网络服务器。 我试图避免阻止IO,所以基本上我为所有当前连接创建了一个轮询线程。
While True
For Each oNetworkstream In lstNetworkstream
If oNetworkstream.DataAvailable Then
'Read from stream
End If
Next
End While
因此,只要连接有一些新数据,我就可以读取它,否则立即检查下一个连接。
现在我正在使用https扩展网络服务器。 因此,我使用.Net SslStream类。 我想应用相同的原则(一个轮询线程来读取所有流)
由于没有.DataAvailable属性,我试过宽度.Length> 0, 但这会产生NotSupportedException(此流不支持搜索操作)
Dim oSslStream As New SslStream(oStream, False)
oSslStream.AuthenticateAsServer(moCertificateKeyPair)
MsgBox(oSslStream.Length)
那么,我怎样才能确定某个解密流是否有数据可用而不会阻塞该线程?
答案 0 :(得分:0)
当你有很多连接时,避免阻塞是一个好主意。但民意调查不是解决问题的方法。
相反,您应该使用异步IO。当数据准备就绪时,让系统通知您。
使用C#5,您应该使用async/await
+ ReadAsync
。在较低的C#版本中,您应该使用基于任务的IO(IOW仍然使用ReadAsync
可用)。如果它不可用,请编写您自己的版本。如果您不能这样做,请使用BeginRead
。