#状态 #异步 #线程安全 #等待 #存储 #方式 #枚举

此状态

此状态提供了一种以线程安全的方式存储状态以及异步等待状态变化的方法

4 个版本 (2 个破坏性更新)

0.3.0 2023 年 12 月 17 日
0.2.0 2023 年 6 月 11 日
0.1.1 2023 年 6 月 11 日
0.1.0 2023 年 6 月 11 日

#639 in 异步

ISC 许可证

39KB
752

此状态

此状态提供了一种以线程安全的方式存储状态以及异步等待状态变化的方法。

示例

以下示例使用了以下状态

#[derive(Clone, Debug, PartialEq)]
enum MyState {
    A,
    B,
    C
}

等待状态变化

let state = State::new(MyState::A);

let state_clone = state.clone();
tokio::spawn(async move {
    // do some work
    state_clone.set(MyState::B);
    // do some more work
    state_clone.set(MyState::C);
});

state.wait_for_state(MyState::C).await;

assert_eq!(state.get(), MyState::C);

lib.rs:

用于管理状态变化的库。

示例

以下示例使用了以下状态

#[derive(Clone, Debug, PartialEq)]
enum MyState {
    A,
    B,
    C
}

等待状态变化

#
#
#
let state = State::new(MyState::A);

let state_clone = state.clone();
tokio::spawn(async move {
    // do some work
    # tokio::time::sleep(tokio::time::Duration::from_millis(10)).await;
    state_clone.set(MyState::B);
    // do some more work
    # tokio::time::sleep(tokio::time::Duration::from_millis(10)).await;
    state_clone.set(MyState::C);
});

state.wait_for_state(MyState::C).await;

assert_eq!(state.get(), MyState::C);

依赖项

~0.4–5.5MB
~11K SLoC