为什么我不能在 System.Net.Sockets.Socket 上设置 ReceiveTimeout 属性?
Why can't I set the ReceiveTimeout property on System.Net.Sockets.Socket?
我正在尝试将 ReceiveTimeout
属性 设置为 System.Net.Sockets.Sockets
对象。我没有例外,但价值并没有坚持。示例:
m_socket = new Socket(RemoteEndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
m_socket.ReceiveTimeout = TimeSpan.FromSeconds(1).Milliseconds;
Debug.WriteLine($"Set ReceiveTimeout to {m_socket.ReceiveTimeout} ms");
输出:
Set ReceiveTimeout to 0 ms
我知道当我设置这个 属性 时,幕后发生了很多事情,但如果失败,它似乎是无声的。为什么价值不坚守?
您将值设置为 0,因为这是 1 秒时间跨度的 TimeSpan.Milliseconds
的值。 Milliseconds
属性 实际上是“sub-second 毫秒分量” - 与(例如)TimeSpan.FromHours(1.5)
的 Minutes
属性 相同是 30,不是 90。来自 docs for TimeSpan.Milliseconds
:
The millisecond component of the current TimeSpan structure. The return value ranges from -999 through 999.
如果您想要 TimeSpan 中的 总 毫秒数,请使用 TotalMilliseconds
属性,然后转换为 int
。
示例:
using System;
var timeSpan = TimeSpan.FromSeconds(1);
Console.WriteLine(timeSpan.Milliseconds); // Prints 0
Console.WriteLine((int) timeSpan.TotalMilliseconds); // Prints 1000
我正在尝试将 ReceiveTimeout
属性 设置为 System.Net.Sockets.Sockets
对象。我没有例外,但价值并没有坚持。示例:
m_socket = new Socket(RemoteEndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
m_socket.ReceiveTimeout = TimeSpan.FromSeconds(1).Milliseconds;
Debug.WriteLine($"Set ReceiveTimeout to {m_socket.ReceiveTimeout} ms");
输出:
Set ReceiveTimeout to 0 ms
我知道当我设置这个 属性 时,幕后发生了很多事情,但如果失败,它似乎是无声的。为什么价值不坚守?
您将值设置为 0,因为这是 1 秒时间跨度的 TimeSpan.Milliseconds
的值。 Milliseconds
属性 实际上是“sub-second 毫秒分量” - 与(例如)TimeSpan.FromHours(1.5)
的 Minutes
属性 相同是 30,不是 90。来自 docs for TimeSpan.Milliseconds
:
The millisecond component of the current TimeSpan structure. The return value ranges from -999 through 999.
如果您想要 TimeSpan 中的 总 毫秒数,请使用 TotalMilliseconds
属性,然后转换为 int
。
示例:
using System;
var timeSpan = TimeSpan.FromSeconds(1);
Console.WriteLine(timeSpan.Milliseconds); // Prints 0
Console.WriteLine((int) timeSpan.TotalMilliseconds); // Prints 1000