pub fn dispatch<T>(key: &str, event: T) -> Result<(), DispatchError>Expand description
事件分发函数
§执行流程
- 获取全局锁(阻塞直到获取成功)
- 在锁保护下进行匹配:遍历所有 action,找到优先级最高的匹配项
- 若无匹配,释放锁并返回错误
- 若匹配成功:
sync = false: 立即释放锁,然后执行函数(支持并发)sync = true: 保持持有锁,执行函数,完成后自动释放(全局排他)
§类型约束
T: 'static + Send + Sync: 确保事件类型可以跨线程传递
§示例
ⓘ
#[derive(Clone)]
struct MyEvent { id: u64 }
#[action(regex = r"user/\d+", priority = 5, sync = false)]
fn handle_user(event: MyEvent) {
println!("处理用户: {}", event.id);
}
dispatch("user/123", MyEvent { id: 123 })?;