hiasync
一个单线程下调度异步任务的运行时, 不依赖任何底层系统接口,仅提供在同步环境下调用异步函数的能力.
版本说明
v0.1.6
增加两个异步接口:
async fn task_resume(task_id: u64);async fn notify_events(events: &[Event<'static>]);
v0.1.5
- 新增
task_self/task_suspend/task_resume方便支持业务层自己的异步事件通知机制.
进一步将异步事件数据的传递机制和Runtime解耦, 业务层按需自定义.
async fn send_event(ctx: Rc<RefCell<MsgContext>>, msg: MsgRequest) -> msgResponse {
non_block_send(&msg);
// 将消息的key和当前task关联起来
let task_id = task_self().await;
ctx.insert(msg.key(), task_id);
task_suspend().await;
ctx.get_response(msg.key())
}
fn notify_response(ctx: Rc<RefCell<MsgContext>>, msg: MsgResponse, rt: &mut Runtime) {
if let Some(task_id) = ctx.get_task_id(msg.key()) {
ctx.set_response(msg);
rt.task_resume(task_id);
}
}
v0.1.4
- 新增
JoinHandle::abort接口 - 新增JoinSet, 管理多个并发的子异步任务. 参见
lib.rs中的测试用例.
v0.1.3
新增partial_or. 消除or中存在的异步任务可能被强制终止的场景.
v0.1.2
新增and, or组合多个Future.
async
样例
主要应用于将非阻塞接口实现的同步函数改造为异步函数的场景.
如下是一个例子:
我们希望将process_msg改造为异步函数,可以如下实现:
use ;
async
async