.NET 4.0中的Timeout.InfiniteTimespan是什么?

19

我知道在.NET 4.0中实际上不存在Timeout.InfiniteTimespan

请注意,在.NET 4.0中确实存在Timeout.Infinite

我正在调用这两个方法:

// the Change-Method
public bool Change(
    TimeSpan dueTime,
    TimeSpan period
)

// the Constructor of Timer
public Timer(
    TimerCallback callback,
    Object state,
    TimeSpan dueTime,
    TimeSpan period
)
在某些情况下,dueTime参数需要是无限的,这意味着事件不会被触发。我知道我可以简单地使用其他重载,但我觉得应该有更简单的方法。
我已经尝试使用new TimeSpan(0, 0, -1)new TimeSpan(-1)作为dueTime,但这将抛出一个指向dueTime参数的ArgumentOutOfRangeException异常。 是否有可能创建一个类似于.NET 4.5中的Timeout.InfiniteTimespan的字面量?
3个回答

31

TimeOut.InfiniteTimeSpanTimeOut类中被定义为无限时间间隔。

public static readonly TimeSpan InfiniteTimeSpan = new TimeSpan(0, 0, 0, 0, Timeout.Infinite);
< p >< em > 当设置< code > Timeout.Infinite 为< code > -1 时,将传递< strong >< code > -1 毫秒的值

你可以这样做:

TimeSpan InfiniteTimeSpan = new TimeSpan(0, 0, 0, 0, -1);

17

无限时间跨度就是毫秒设置为-1TimeSpan

因此,您只需执行以下操作即可

TimeSpan infinite = TimeSpan.FromMilliseconds(-1);

0
如果您的模型支持“到期”时间不存在的事件,则将其设置为无穷大以表示似乎是错误的。为什么不将参数设置为可为空?

似乎有一个误解... 主题是System.Threading.Timer - LuckyLikey
啊,那个没有被指定。我认为你的业务逻辑有问题,如果事件从未触发,那么为什么要将其放入计时器中呢? - matt
你说得对,它没有被指定。但别担心 :) ... 它会在应该执行的时候触发,并且计时器从未被初始化、停止或剩余未使用。 - LuckyLikey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接