1 use std::future::Future; 2 3 cfg_rt! { 4 #[track_caller] 5 pub(crate) fn block_on<F: Future>(f: F) -> F::Output { 6 let mut e = crate::runtime::context::try_enter_blocking_region().expect( 7 "Cannot block the current thread from within a runtime. This \ 8 happens because a function attempted to block the current \ 9 thread while the thread is being used to drive asynchronous \ 10 tasks." 11 ); 12 e.block_on(f).unwrap() 13 } 14 } 15 16 cfg_not_rt! { 17 #[track_caller] 18 pub(crate) fn block_on<F: Future>(f: F) -> F::Output { 19 let mut park = crate::runtime::park::CachedParkThread::new(); 20 park.block_on(f).unwrap() 21 } 22 } 23