Перечисление Unhandled Panic
#[non_exhaustive]pub enum UnhandledPanic {
Ignore,
ShutdownRuntime,
}
tokio_unstable и при включённой функции crate rt.Как среда выполнения должна реагировать на необработанные паники.
Экземпляры UnhandledPanic передаются в Builder::unhandled_panic для настройки поведения среды выполнения при панике в запущенной задаче.
Подробнее см. в разделе Builder::unhandled_panic.
Варианты (неполный перечень)
Ignore
Среда выполнения должна игнорировать паники в запущенных задачах.
Паника передаётся в JoinHandle задачи, и все запущенные задачи продолжают работу в обычном режиме.
Это поведение по умолчанию.
Примеры
use tokio::runtime::{self, UnhandledPanic};
let rt = runtime::Builder::new_current_thread()
.unhandled_panic(UnhandledPanic::Ignore)
.build()
.unwrap();
let task1 = rt.spawn(async { panic!("boom"); });
let task2 = rt.spawn(async {
// This task completes normally
"done"
});
rt.block_on(async {
// The panic on the first task is forwarded to the `JoinHandle`
assert!(task1.await.is_err());
// The second task completes normally
assert!(task2.await.is_ok());
})ShutdownRuntime
Среда выполнения должна немедленно завершить работу, если в запущенной задаче произойдёт паника.
Среда выполнения немедленно завершит работу, даже если JoinHandle задачи, в которой произошла паника, всё ещё доступен. Все последующие запущенные задачи будут немедленно отброшены, а вызов Runtime::block_on приведёт к панике.
Примеры
use tokio::runtime::{self, UnhandledPanic};
let rt = runtime::Builder::new_current_thread()
.unhandled_panic(UnhandledPanic::ShutdownRuntime)
.build()
.unwrap();
rt.spawn(async { panic!("boom"); });
rt.spawn(async {
// This task never completes.
});
rt.block_on(async {
// Do some work
})
Реализации трейтов
impl Clone for UnhandledPanic
fn clone(&self) -> UnhandledPanic
fn clone_from(&mut self, source: &Self)
source. Подробнее
Автоматические реализации трейтов
impl Freeze for UnhandledPanic
impl RefUnwindSafe for UnhandledPanic
impl Send for UnhandledPanic
impl Sync for UnhandledPanic
impl Unpin for UnhandledPanic
impl UnsafeUnpin for UnhandledPanic
impl UnwindSafe for UnhandledPanic
Обобщённые реализации
impl<T> BorrowMut<T> for Twhere T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
impl<T> CloneToUninit for Twhere T: Clone,
unsafe fn clone_to_uninit(&self, dest: *mut u8)
clone_to_uninit)
impl<T> Instrument for T
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
impl<T> ToOwned for Twhere T: Clone,
type Owned = T
fn to_owned(&self) -> T
fn clone_into(&self, target: &mut T)
impl<T> WithSubscriber for T
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
Subscriber к этому типу и возвращает обёртку WithDispatch. Подробнее
MIT License
Copyright © Tokio Contributors
https://docs.rs/tokio/1.53.1/tokio/runtime/enum.UnhandledPanic.html