Macro zng::handler::async_app_hn_once
source · macro_rules! async_app_hn_once { ($($tt:tt)+) => { ... }; }
Expand description
Declare an async clone-move app event handler that is only called once.
The macro input is a closure with optional clone-move variables, internally it uses async_clmv_fn_once!
so
the input is the same syntax.
§Examples
The example captures data
by move and then moves it again to another thread. This is not something you can do using async_app_hn!
because that handler expects to be called many times. We want to handle CLICK_EVENT
once in this example, so we can don’t need
to capture by clone-move just to use data
.
let data = vec![1, 2, 3];
on_open = async_hn_once!(|_| {
task::run(async move {
for i in data {
print!("{i}, ");
}
}).await;
println!("Done!");
});
You can still clone-move to have access to the variable after creating the handler, in this case the data
will be cloned into the handler
but will just be moved to the other thread, avoiding a needless clone.
let data = vec![1, 2, 3];
on_open = async_hn_once!(data, |_| {
task::run(async move {
for i in data {
print!("{i}, ");
}
}).await;
println!("Done!");
});
println!("{data:?}");