mirror of
https://github.com/tokio-rs/tokio.git
synced 2026-08-22 00:00:11 +02:00
runtime: add Handle::try_current (#2118)
* runtime: add Handle::try_current Makes it possible to get a Handle only if a Runtime has been started, without panicing if that isn't the case * Use an error instead
This commit is contained in:
committed by
Lucio Franco
parent
7eb8d447ad
commit
1475448bdf
@@ -1,4 +1,5 @@
|
||||
use crate::runtime::{blocking, context, io, time, Spawner};
|
||||
use std::{error, fmt};
|
||||
|
||||
cfg_rt_core! {
|
||||
use crate::task::JoinHandle;
|
||||
@@ -61,6 +62,15 @@ impl Handle {
|
||||
pub fn current() -> Self {
|
||||
context::current().expect("not currently running on the Tokio runtime.")
|
||||
}
|
||||
|
||||
/// Returns a Handle view over the currently running Runtime
|
||||
///
|
||||
/// Returns an error if no Runtime has been started
|
||||
///
|
||||
/// Contrary to `current`, this never panics
|
||||
pub fn try_current() -> Result<Self, TryCurrentError> {
|
||||
context::current().ok_or(TryCurrentError(()))
|
||||
}
|
||||
}
|
||||
|
||||
cfg_rt_core! {
|
||||
@@ -105,3 +115,20 @@ cfg_rt_core! {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Error returned by `try_current` when no Runtime has been started
|
||||
pub struct TryCurrentError(());
|
||||
|
||||
impl fmt::Debug for TryCurrentError {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
f.debug_struct("TryCurrentError").finish()
|
||||
}
|
||||
}
|
||||
|
||||
impl fmt::Display for TryCurrentError {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
f.write_str("no tokio Runtime has been initialized")
|
||||
}
|
||||
}
|
||||
|
||||
impl error::Error for TryCurrentError {}
|
||||
|
||||
@@ -208,7 +208,7 @@ pub(crate) mod enter;
|
||||
use self::enter::enter;
|
||||
|
||||
mod handle;
|
||||
pub use self::handle::Handle;
|
||||
pub use self::handle::{Handle, TryCurrentError};
|
||||
|
||||
mod io;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user