cfg_rt! { pub(crate) use crate::runtime::spawn_blocking; pub(crate) use crate::task::JoinHandle; } cfg_not_rt! { use std::fmt; use std::future::Future; use std::pin::Pin; use std::task::{Context, Poll}; pub(crate) fn spawn_blocking(_f: F) -> JoinHandle where F: FnOnce() -> R + Send + 'static, R: Send + 'static, { assert_send_sync::>>(); panic!("requires the `rt` Tokio feature flag") } pub(crate) struct JoinHandle { _p: std::marker::PhantomData, } unsafe impl Send for JoinHandle {} unsafe impl Sync for JoinHandle {} impl Future for JoinHandle { type Output = Result; fn poll(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll { unreachable!() } } impl fmt::Debug for JoinHandle where T: fmt::Debug, { fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result { fmt.debug_struct("JoinHandle").finish() } } fn assert_send_sync() { } }