Timers are used to generate IO.Promises that resolve after some time.
A Timer can be in one of 3 states:
- Right after construction it's initial.
 - While it is ticking it's running.
 - If it has stopped for some reason it's finished.
 
This together with whether it was set up as repeating with Timer.new determines the behavior
of all functions on Timers.
Instances For
@[extern lean_uv_timer_mk]
This creates a Timer in the initial state and doesn't run it yet.
- If 
repeatingisfalsethis constructs a timer that resolves once aftertimeoutmilliseconds, counting from when it's run. - If 
repeatingistruethis constructs a timer that resolves after multiples oftimeoutmilliseconds, counting from when it's run. Note that this includes the 0th multiple right after starting the timer. Furthermore a repeating timer will only be freed afterTimer.stopis called. 
@[extern lean_uv_timer_next]
This function has different behavior depending on the state and configuration of the Timer:
- if 
repeatingisfalseand:- it is initial, run it and return a new 
IO.Promisethat is set to resolve oncetimeoutmilliseconds have elapsed. After thisIO.Promiseis resolved theTimeris finished. - it is running or finished, return the same 
IO.Promisethat the first call tonextreturned. 
 - it is initial, run it and return a new 
 - if 
repeatingistrueand:- it is initial, run it and return a new 
IO.Promisethat resolves right away (as it is the 0th multiple oftimeout). - it is running, check whether the last returned 
IO.Promiseis already resolved:- If it is, return a new 
IO.Promisethat resolves upon finishing the next cycle - If it is not, return the last 
IO.PromiseThis ensures that the returnedIO.Promiseresolves at the next repetition of the timer. 
 - If it is, return a new 
 - if it is finished, return the last 
IO.Promisecreated bynext. Notably this could be one that never resolves if the timer was stopped before fulfilling the last one. 
 - it is initial, run it and return a new 
 
@[extern lean_uv_timer_reset]
This function has different behavior depending on the state and configuration of the Timer:
- If it is initial or finished this is a no-op.
 - If it is running and 
repeatingisfalsethis will delay the resolution of the timer untiltimeoutmilliseconds after the call of this function. - Delay the resolution of the next tick of the timer until 
timeoutmilliseconds after the call of this function, then continue normal ticking behavior from there. 
@[extern lean_uv_timer_stop]
This function has different behavior depending on the state of the Timer:
- If it is initial or finished this is a no-op.
 - If it is running the execution of the timer is stopped and it is put into the finished state.
Note that if the last 
IO.Promisegenerated bynextis unresolved and being waited on this creates a memory leak and the waiting task is not going to be awoken anymore.