hiasync
一个单线程下调度异步任务的运行时, 不依赖任何底层系统接口,仅提供在同步环境下调用异步函数的能力.
版本说明
v0.2.1
新增: async fn task_force_abort(task_id: u64)
v0.2.0
新增:
JoinHandle<T>::task_id
新增两个强制结束异步任务的接口:
Runtime::task_force_abortJoinHandle<T>::force_abort
与此对应的是JoinHandle::join的返回值从T变更为Option<T>.
JoinSet::wait_all和JoinSet::wait_any的返回值也由(u64, T)变更为(u64, Option<T>).
JoinHandle<T>的泛型参数类型从Future变更为Future::Output
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