use std::future::Future; cfg_rt! { #[track_caller] pub(crate) fn block_on(f: F) -> F::Output { let mut e = crate::runtime::context::try_enter_blocking_region().expect( "Cannot block the current thread from within a runtime. This \ happens because a function attempted to block the current \ thread while the thread is being used to drive asynchronous \ tasks." ); e.block_on(f).unwrap() } } cfg_not_rt! { #[track_caller] pub(crate) fn block_on(f: F) -> F::Output { let mut park = crate::runtime::park::CachedParkThread::new(); park.block_on(f).unwrap() } }