我应该更喜欢哪一个?
前者和后者都会将其内部Socket 设置为接收超时。同一个套接字将从TcpClient 冒泡到创建的NetworkStream,所以我会选择前者。
它们在有效性方面是否相同或在哪些方面不同?
我们可以看看source code,这是一件好事。
这是TcpClient.ReceiveTimeout:
public int ReceiveTimeout
{
get
{
return numericOption(SocketOptionLevel.Socket,
SocketOptionName.ReceiveTimeout);
}
set
{
Client.SetSocketOption(SocketOptionLevel.Socket,
SocketOptionName.ReceiveTimeout, value);
}
}
设置底层客户端套接字的接收超时(Client 的类型为Socket)。然后传递给NetworkStream:
public NetworkStream GetStream()
{
// Shortened for brevity
if (m_DataStream==null)
{
m_DataStream = new NetworkStream(Client, true);
}
return m_DataStream;
}
当NetworkStream 查找超时时,它会在Socket 内部查找:
public override int ReadTimeout
{
get
{
int timeout = (int)m_StreamSocket.GetSocketOption(SocketOptionLevel.Socket,
SocketOptionName.ReceiveTimeout);
if (timeout == 0)
{
return -1;
}
}
return timeout;
}