Sha256: 8e75239ae694f296136fbacadb232ae0a255b0b2013e1eb0390bfbb82af36692
Contents?: true
Size: 1.3 KB
Versions: 38
Compression:
Stored size: 1.3 KB
Contents
use pin_project_lite::pin_project; use std::future::Future; use std::pin::Pin; use std::task::{Context, Poll}; pin_project! { /// Future for the [`unconstrained`](unconstrained) method. #[cfg_attr(docsrs, doc(cfg(feature = "rt")))] #[must_use = "Unconstrained does nothing unless polled"] pub struct Unconstrained<F> { #[pin] inner: F, } } impl<F> Future for Unconstrained<F> where F: Future, { type Output = <F as Future>::Output; cfg_coop! { fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> { let inner = self.project().inner; crate::runtime::coop::with_unconstrained(|| inner.poll(cx)) } } cfg_not_coop! { fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> { let inner = self.project().inner; inner.poll(cx) } } } /// Turn off cooperative scheduling for a future. The future will never be forced to yield by /// Tokio. Using this exposes your service to starvation if the unconstrained future never yields /// otherwise. /// /// See also the usage example in the [task module](index.html#unconstrained). #[cfg_attr(docsrs, doc(cfg(feature = "rt")))] pub fn unconstrained<F>(inner: F) -> Unconstrained<F> { Unconstrained { inner } }
Version data entries
38 entries across 38 versions & 1 rubygems