當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Rust Once.call_once_force用法及代碼示例


本文簡要介紹rust語言中 std::sync::Once.call_once_force 的用法。

用法

pub fn call_once_force<F>(&self, f: F) where    F: FnOnce(&OnceState),

執行與 call_once() 相同的函數,但忽略中毒。

不像std::sync::Once.call_once, 如果這std::sync::Once已中毒(即,先前的調用std::sync::Once.call_once或者std::sync::Once.call_once_force引起Panics),調用std::sync::Once.call_once_force仍然會調用閉包f還會不是導致立即Panics。如果fPanicsstd::sync::Once會一直處於中毒狀態。如果f不是Panicsstd::sync::Once將不再處於中毒狀態,並且所有未來的調用std::sync::Once.call_once或者std::sync::Once.call_once_force將是no-ops。

閉包 f 產生一個 OnceState 結構,可用於查詢 Once 的中毒狀態。

例子

use std::sync::Once;
use std::thread;

static INIT: Once = Once::new();

// poison the once
let handle = thread::spawn(|| {
    INIT.call_once(|| panic!());
});
assert!(handle.join().is_err());

// poisoning propagates
let handle = thread::spawn(|| {
    INIT.call_once(|| {});
});
assert!(handle.join().is_err());

// call_once_force will still run and reset the poisoned state
INIT.call_once_force(|state| {
    assert!(state.is_poisoned());
});

// once any success happens, we stop propagating the poison
INIT.call_once(|| {});

相關用法


注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 std::sync::Once.call_once_force。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。