the very same Heartbeat step in which enough time has passed, the function is guaranteed to be called/resumed
Based on the code in your function, the coroutine returned shouldn’t possibly be in the suspended state after the delay, since it doesn’t do any yielding.
[Edit: If Dice:NextNumber or .SetGameSetting yields this might be possible?]
This would lead me to believe this is a problem on Roblox’s end perhaps?
Out of curiosity, does using
task.spawn(function()
task.wait(delayTime)
-- Your code
end
Do anything different? Or does this seem to happen with all threads given to the engine’s scheduler?
Maybe the script is deleting the task.delay() because of the :Connect() Signal, firing again as you said GoodSignal gets ReUsed
by turning it into local Task, it should fix that problem normally.
Since GoodSignal is already a task, as we look into the Module at line 151, 164
I’ve already tried making a strong reference to the task.delay but it still remains permanently suspended. Perhaps it may not be a GoodSignal issue but more rather a ROBLOX issue? The only reason I have a suspicion that it’s GoodSignal is that all of the incidents have been happening inside of connections made by GoodSignal.
This would not even matter since GoodSignal only ever reuses 1 free runner thread.
Threads are not true parallel. This means that running coroutine.running on a thread outside of said thread will never give you a status of running. Add a print to your task.delay thread to see if it’s even running. If it does, the problem likely lies with the function that has been passed.