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.