pub struct Interval<M> { /* private fields */ }Expand description
A source that emits messages periodically. Clones the message on every tick.
§Tracing
Every message starts a new trace, thus a new trace id is generated and assigned to the current scope.
§Example
use elfo::{time::Interval, messages::ConfigUpdated};
#[message]
struct MyTick;
let interval = ctx.attach(Interval::new(MyTick));
interval.start(ctx.config().period);
while let Some(envelope) = ctx.recv().await {
msg!(match envelope {
ConfigUpdated => {
interval.set_period(ctx.config().period);
},
MyTick => {
tracing::info!("tick!");
},
});
}Implementations§
Source§impl<M: Message> Interval<M>
impl<M: Message> Interval<M>
Sourcepub fn new(message: M) -> UnattachedSource<Self>
pub fn new(message: M) -> UnattachedSource<Self>
Creates an unattached instance of Interval.
Sourcepub fn set_message(&self, message: M)
pub fn set_message(&self, message: M)
Replaces a stored message with the provided one.
Sourcepub fn set_period(&self, period: Duration)
pub fn set_period(&self, period: Duration)
Configures the period of ticks. Intended to be called on
ConfigUpdated.
Does nothing if the timer is not started or the period hasn’t been changed.
Unlike rescheduling (start_* methods), it only adjusts the current
period and doesn’t change the time origin. For instance, if we have
a configured interval with period = 5s and try to call one of these
methods, the difference looks something like this:
set_period(10s): | 5s | 5s | 5s | # 10s | 10s |
start(10s): | 5s | 5s | 5s | # 10s | 10s |
#
called here§Panics
If period is zero.
Sourcepub fn start(&self, period: Duration)
pub fn start(&self, period: Duration)
Schedules the timer to start emitting ticks every period.
The first tick will be emitted also after period.
Reschedules the timer if it’s already started.
§Panics
If period is zero.
Sourcepub fn start_after(&self, delay: Duration, period: Duration)
pub fn start_after(&self, delay: Duration, period: Duration)
Schedules the timer to start emitting ticks every period.
The first tick will be emitted after delay.
Reschedules the timer if it’s already started.
§Panics
If period is zero.
Sourcepub fn start_at(&self, when: Instant, period: Duration)
Available on crate feature unstable only.
pub fn start_at(&self, when: Instant, period: Duration)
unstable only.Schedules the timer to start emitting ticks every period.
The first tick will be emitted at when.
Reschedules the timer if it’s already started.
§Panics
If period is zero.
§Stability
This method is unstable, because it accepts tokio::time::Instant,
which will be replaced in the future to support other runtimes.
§Stability
This API is marked as unstable and is only available when the unstable
crate feature is enabled. This comes with no stability guarantees, and could be changed
or removed at any time.
Sourcepub fn stop(&self)
pub fn stop(&self)
Stops any ticks. To resume ticks use one of start_* methods.
Note: it doesn’t terminates the source. It means the source is present
in the source map until SourceHandle::terminate() is called.
Trait Implementations§
Source§impl<M: Message> SourceHandle for Interval<M>
impl<M: Message> SourceHandle for Interval<M>
Source§fn is_terminated(&self) -> bool
fn is_terminated(&self) -> bool
true if the source has stopped producing messages.Source§fn terminate_by_ref(&self) -> bool
fn terminate_by_ref(&self) -> bool
Drop is called immediately. Read more