Skip to main content

Task

Trait Task 

Source
pub trait Task: Send {
    // Required methods
    fn name(&self) -> &str;
    fn run(
        self: Box<Self>,
        shutdown_rx: Receiver<()>,
    ) -> Pin<Box<dyn Future<Output = TaskResult> + Send>>;

    // Provided methods
    fn dependencies(&self) -> Vec<String> { ... }
    fn ready_check(
        &self,
    ) -> Pin<Box<dyn Future<Output = TaskResult> + Send + '_>> { ... }
    fn priority(&self) -> i32 { ... }
    fn is_critical(&self) -> bool { ... }
    fn initial_state(&self) -> TaskState { ... }
}
Expand description

任务抽象 (核心扩展点)

所有需要在运行时中管理的任务都必须实现此 trait 支持依赖声明、生命周期钩子、就绪检查

§实现说明

  • 使用 Rust 2024 原生 async fn in traits(不使用 async-trait 宏)
  • 所有方法提供默认实现,降低实现难度
  • 支持依赖管理、优先级、关键任务标记

§示例

use flare_core_runtime::task::{Task, TaskResult};
use std::pin::Pin;
use std::future::Future;

struct MyTask {
    name: String,
}

impl Task for MyTask {
    fn name(&self) -> &str {
        &self.name
    }

    fn run(
        self: Box<Self>,
        shutdown_rx: tokio::sync::oneshot::Receiver<()>,
    ) -> Pin<Box<dyn Future<Output = TaskResult> + Send>> {
        Box::pin(async move {
            // 任务逻辑
            Ok(())
        })
    }
}

Required Methods§

Source

fn name(&self) -> &str

获取任务名称

任务名称必须唯一,用于日志、指标和依赖管理

Source

fn run( self: Box<Self>, shutdown_rx: Receiver<()>, ) -> Pin<Box<dyn Future<Output = TaskResult> + Send>>

运行任务

§参数
  • shutdown_rx - 关闭信号接收器,当收到信号时任务应该优雅关闭
§返回

返回一个 Future,执行任务逻辑

§实现要求
  • 必须响应 shutdown_rx 信号,实现优雅停机
  • 错误时返回 Err,运行时会根据 is_critical() 决定是否停机

Provided Methods§

Source

fn dependencies(&self) -> Vec<String>

获取任务依赖

返回此任务依赖的其他任务名称列表 依赖的任务会在此任务之前启动

§默认实现

返回空列表(无依赖)

Source

fn ready_check(&self) -> Pin<Box<dyn Future<Output = TaskResult> + Send + '_>>

就绪检查 (可选)

用于检查任务是否已经就绪(例如 gRPC 服务是否已经可以接受连接)

§默认实现

总是返回成功

Source

fn priority(&self) -> i32

任务优先级 (用于启动顺序调整)

优先级高的任务先启动(在依赖关系满足的前提下)

§默认实现

返回 0(中等优先级)

Source

fn is_critical(&self) -> bool

是否关键任务 (失败时触发运行时停机)

§默认实现

返回 false(非关键任务)

Source

fn initial_state(&self) -> TaskState

获取初始状态

§默认实现

返回 TaskState::Pending

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§