2024-01-29 11:41:51 -06:00
|
|
|
//@ aux-build:block-on.rs
|
|
|
|
//@ edition:2018
|
|
|
|
//@ run-pass
|
|
|
|
//@ check-run-results
|
|
|
|
|
2024-02-06 11:41:48 -06:00
|
|
|
#![feature(async_closure)]
|
2024-01-29 11:41:51 -06:00
|
|
|
#![allow(unused)]
|
|
|
|
|
|
|
|
extern crate block_on;
|
|
|
|
|
|
|
|
struct DropMe(i32);
|
|
|
|
|
|
|
|
impl Drop for DropMe {
|
|
|
|
fn drop(&mut self) {
|
|
|
|
println!("{} was dropped", self.0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-02-06 11:41:48 -06:00
|
|
|
async fn call_once(f: impl async FnOnce()) {
|
2024-01-29 11:41:51 -06:00
|
|
|
println!("before call");
|
|
|
|
let fut = Box::pin(f());
|
|
|
|
println!("after call");
|
|
|
|
drop(fut);
|
|
|
|
println!("future dropped");
|
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
block_on::block_on(async {
|
|
|
|
let d = DropMe(42);
|
|
|
|
let async_closure = async move || {
|
|
|
|
let d = &d;
|
|
|
|
println!("called");
|
|
|
|
};
|
|
|
|
|
|
|
|
call_once(async_closure).await;
|
|
|
|
println!("after");
|
|
|
|
});
|
|
|
|
}
|