pub trait RunnableTask: Send {
// Required methods
fn run<'life0, 'life1, 'async_trait>(
&'life0 mut self,
watcher: &'life1 mut StateWatcher,
) -> Pin<Box<dyn Future<Output = TaskNextAction> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn shutdown<'async_trait>(
self,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait;
}Expand description
The trait is implemented by the service task and contains a single iteration of the infinity loop.
Required Methods§
Sourcefn run<'life0, 'life1, 'async_trait>(
&'life0 mut self,
watcher: &'life1 mut StateWatcher,
) -> Pin<Box<dyn Future<Output = TaskNextAction> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn run<'life0, 'life1, 'async_trait>(
&'life0 mut self,
watcher: &'life1 mut StateWatcher,
) -> Pin<Box<dyn Future<Output = TaskNextAction> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
This function should contain the main business logic of the service task. It will run until
the service either returns false, panics or a stop signal is received.
If the service returns an error, it will be logged and execution will resume.
This is intended to be called only by the ServiceRunner.
The ServiceRunner continue to call the run method in the loop while the state is
State::Started. So first, the run method should return a value, and after, the service
will stop. If the service should react to the state change earlier, it should handle it in
the run loop on its own. See StateWatcher::while_started.