怎么在collectAny后再继续等待其他RescheduleLazy执行完毕
怎么在collectAny后,再继续等待其他未完成的RescheduleLazy事务执行完毕, 或者换个方式,怎么使用collectAll时,主动捕获任一RescheduleLazy事务的返回或异常进行自定义操作。 因为我的RescheduleLazy很多,如果每个都包装嵌套一个Lazy进行处理很麻烦且不美观。 希望能得到帮助,感谢。
不太理解你的问题,现在我们没有实现取消,所以 collectAny 里的所有任务都是会执行完成的。
如果想要对 Lazy 任务的执行结果进行操作,这里还是推荐用 Lazy 再包一层,再传入这个 Lazy
其实我想做的就是,在执行多个RescheduleLazy时其中一个执行异常了,需要通知所有关联Lazy主动退出,并且等待所有Lazy执行完毕,再进行下一步操作。 不知道有没有好的方法。
如果collectAll能有一个任一任务执行完毕的回调设置就能解决我的问题
这样的话,可能得加个 API 才行,现在的 API 做起来比较麻烦
如果后续有计划支持的话那就太感谢了哈!
我们最近可能不一定有时间,你有需求的话我记得可以仿照这个 https://github.com/alibaba/async_simple/commit/6be48e7b3edde61a8a4e7ca432d25a8d9840153c#diff-176b2550085ca9ac5fc1358dda6fa81b9acfa3cb05e947fb23efc7dd135481af 实现下
感谢指导哈,学习学习
其实我想做的就是,在执行多个RescheduleLazy时其中一个执行异常了,需要通知所有关联Lazy主动退出,并且等待所有Lazy执行完毕,再进行下一步操作。 不知道有没有好的方法。
典型的取消操作
其实我想做的就是,在执行多个RescheduleLazy时其中一个执行异常了,需要通知所有关联Lazy主动退出,并且等待所有Lazy执行完毕,再进行下一步操作。 不知道有没有好的方法。
典型的取消操作
#402 给出了初步设计方案。 通过执行
co_await collectAll<CancellationType::terminal>(work1(),work2());
第一个返回的任务会触发取消信号。尝试取消尚未完成的任务。
取消是协作式的,需要异步IO对象/调度器支持取消操作,或者手动检查。
async_simple所有自带的组件会在将来支持取消操作,并抛出std::system_error{std::errc::operation_canceled}异常。
实现一个支持取消的sleep的简单例子:
Lazy<bool> sleep_1s() {
CancellationSlot* slot = co_await currentCancellationSlot{};
auto p = std::make_unique<Promise<void>>();
auto waiter = p.getFuture();
if (slot) {
if (!slot->emplace([p=std::move(p)](CancellationType type){
p.notity();
})) {
// signal has triggered
co_return;
}
}
co_await waiter.waitFor(1s);
}
已合入主线。 See doc