Firstly many thanks for act-zero - it's very nice to work with. I've converted a program to it from Riker.
I'm trying to run some cleanup in my actor's drop(), but I can't figure a way to wait for it to complete. .termination()returns immediately. I guess the channel is closed before the inner actor is dropped?
I guess maybe the AddrInner could drop its Actor value before closing channels, but I'm not sure where. Any ideas would be appreciated.
// Copy of using_async_std example
use act_zero::runtimes::async_std::spawn_actor;
use act_zero::*;
struct HelloWorldActor;
impl Actor for HelloWorldActor {}
impl HelloWorldActor {
async fn say_hello(&mut self) {
println!("Hello, world!");
}
}
impl Drop for HelloWorldActor {
fn drop(&mut self) {
println!("actor drop starts, waiting a sec");
std::thread::sleep(std::time::Duration::from_secs(1));
println!("actor drop done");
}
}
#[async_std::main]
async fn main() -> Result<(), ActorError> {
let addr = spawn_actor(HelloWorldActor);
call!(addr.say_hello()).await?;
let ended = addr.termination();
std::mem::drop(addr);
ended.await;
println!("The End");
Ok(())
% cargo run --example using_async_std --features=async-std
Hello, world!
actor drop starts, waiting a sec
The End
%
Firstly many thanks for act-zero - it's very nice to work with. I've converted a program to it from Riker.
I'm trying to run some cleanup in my actor's
drop()
, but I can't figure a way to wait for it to complete..termination()
returns immediately. I guess the channel is closed before the inner actor is dropped? I guess maybe the AddrInner could drop its Actorvalue
before closing channels, but I'm not sure where. Any ideas would be appreciated.