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 | |