| //@ aux-build:block-on.rs |
| //@ edition:2018 |
| //@ run-pass |
| //@ check-run-results |
| |
| #![feature(async_closure)] |
| #![allow(unused)] |
| |
| extern crate block_on; |
| |
| struct DropMe(i32); |
| |
| impl Drop for DropMe { |
| fn drop(&mut self) { |
| println!("{} was dropped", self.0); |
| } |
| } |
| |
| async fn call_once(f: impl async FnOnce()) { |
| 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"); |
| }); |
| } |