为什么我不能在 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