task.wait() in a while loop never stops if the script is disabled or destroyed. This is similar to custom wait modules that use coroutine.yield. So I assume task.wait has a similar implementation but internally.
Reproduction:
while true do
print("Running")
task.wait(0.5)
end
Put this in a script, then disable the script. It will continue to print.
Now change task.wait to wait, then disable the script. It will stop.
With custom wait modules there was no way other than adding checks within the loop to fix this, but since this implementation is internal there should be a way to fix this. I hope it is fixed soon, it is the only thing preventing me from using task.wait and I cannot stand the original wait function much longer. So please fix this.
But I don’t think inventing a new function just for different debugging is good and I think we should rather port the behavior of task.spawn to coroutine.wrap
The second result is seldom used, so most people are probably unaware of it. It is very similar to the result of elapsedTime, which has nothing to do with the wait function. The wait function returning 2 values is weird, it doesn’t make sense to follow the same weird design set by wait.
It’s not deprecated yet so that people have some time to naturally migrate off of it before being annoyed by warnings in the script editor, but it will be at some point.
Well it does make sense, since wait is the only function that is used the most, so I guess it’s good to give developers some time. Thanks for the reply!
So does this mean that my analogy is correct? When .defer was released I went by saying “It basically schedules threads to be resumed once there’s no other threads running anymore.” Would that mean that this analogy isn’t actually that wrong?
I’ve heard before that Debris uses the older ‘deprecated’ wait/delay, anything I ask forward is dependant if that’s the case, if that’s the case, any plan to switch Debris to use task.wait/delay instead? Is that something that you guys think could break some code? If so, would Debris get possibly deprecated in the near future?
I know I can, that’s why I would expect Debris to be deprecated since it just does that anyway.
I always thought Debris was weird.
Also, even better version of this: You could add some asserting into this, but this works just fine.
local function DestroyInstanceIn(waitTime, instance)
assert(
typeof(waitTime) == 'number',
"WaitTime must be a number!"
)
assert(
typeof(instance) == 'Instance',
"Must be an instance"
)
task.delay(waitTime, instance.Destroy, instance)
end