19

I actually do know that Timeout.InfiniteTimespan does not exist in .NET 4.0.

Noticed, there's also Timeout.Infinite which does exist in .NET 4.0

I am calling those two methods:

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

// the Constructor of Timer
public Timer(
    TimerCallback callback,
    Object state,
    TimeSpan dueTime,
    TimeSpan period
)

in some cases, the dueTime Parameter needs to be infinite, which means the Event is not fired. I know I could simply use an other overload, but I feel like something has to be more simple.

I already tried using new TimeSpan(0, 0, -1) or new TimeSpan(-1) as dueTime. *But that throws an ArgumentOutOfRangeException pointing to the dueTime Parameter.

Is it somehow possible to create a literal working like the Timeout.InfiniteTimespan from .NET 4.5 ?

LuckyLikey
  • 3,504
  • 1
  • 31
  • 54

3 Answers3

31

TimeOut.InfiniteTimeSpan in TimeOut class is defined as:

public static readonly TimeSpan InfiniteTimeSpan = new TimeSpan(0, 0, 0, 0, Timeout.Infinite);

Where Timeout.Infinite is set to -1,so it is passing -1 value for milliseconds part.

You can do:

TimeSpan InfiniteTimeSpan = new TimeSpan(0, 0, 0, 0, -1);
Habib
  • 219,104
  • 29
  • 407
  • 436
17

Infinite timespan is nothing but TimeSpan with milliseconds set to -1

So, you can just do

TimeSpan infinite = TimeSpan.FromMilliseconds(-1);
Sriram Sakthivel
  • 72,067
  • 7
  • 111
  • 189
0

If your model supports events where the "due" time does not exist, then setting it to infinity to indicate that seems wrong. Why not make the parameter nullable?

matt
  • 9,113
  • 3
  • 44
  • 46
  • It seems like there was a missunderstanding.. the subject is the `System.Threading.Timer` – LuckyLikey May 19 '15 at 14:12
  • Ah, that wasn't specified. I think there's something wrong with your business logic, however - if the event never fires, then why bother putting it into the timer? – matt May 19 '15 at 14:14
  • You are right, it wasnt specified. Allthough dont worry :)... it does fire when it should and the timer is never initialized, stopped and remaining unused. – LuckyLikey May 19 '15 at 14:28