Task.delay(math.huge, func) fires immediately, and so do NaN arguments

Calling task.delay(t, f) where t is either math.huge or a NaN will cause function f to be called immediately. Examples:

local t = tick()
task.delay(math.sqrt(-1), function() print(tick() - t) end)
task.delay(math.huge, function() print(tick() - t) end)

This prints:

0.015317916870117188
0.015427589416503906

I am not sure what the expected behavior would be, but especially in the case of math.huge being supplied as the duration parameter, I would expect one of the following behaviors instead:

  1. An error or warning is thrown for supplying an invalid number.
  2. The function is never called as it’s being delayed forever.

If this behavior turns out to be intended there should be a warning at the minimum.

3 Likes

We wanted the task library to be a drop in replacement for the existing scheduling globals so we could eventually deprecate them with clear migration instructions. This meant that we carried over some of their logic in the process leading to behavior like this. Amusingly enough, I actually made a note about this particular case at the time but we left it as is for consistency.

So, the tl;dr is that this is intended behavior but we’ll look at adding a warning so users aren’t surprised by this. :smiley:

4 Likes

Hi there, I’ve added a warning when task.delay is called where t is NaN or math.huge/Infinity, warning you that t will default to zero. Thanks for the report!

3 Likes

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.