当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。