-
Notifications
You must be signed in to change notification settings - Fork 264
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
怎么在collectAny后再继续等待其他RescheduleLazy执行完毕 #381
Comments
不太理解你的问题,现在我们没有实现取消,所以 collectAny 里的所有任务都是会执行完成的。 如果想要对 Lazy 任务的执行结果进行操作,这里还是推荐用 Lazy 再包一层,再传入这个 Lazy |
其实我想做的就是,在执行多个RescheduleLazy时其中一个执行异常了,需要通知所有关联Lazy主动退出,并且等待所有Lazy执行完毕,再进行下一步操作。 |
如果collectAll能有一个任一任务执行完毕的回调设置就能解决我的问题 |
这样的话,可能得加个 API 才行,现在的 API 做起来比较麻烦 |
如果后续有计划支持的话那就太感谢了哈! |
我们最近可能不一定有时间,你有需求的话我记得可以仿照这个 6be48e7#diff-176b2550085ca9ac5fc1358dda6fa81b9acfa3cb05e947fb23efc7dd135481af 实现下 |
感谢指导哈,学习学习 |
典型的取消操作 |
#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);
} |
怎么在collectAny后,再继续等待其他未完成的RescheduleLazy事务执行完毕,
或者换个方式,怎么使用collectAll时,主动捕获任一RescheduleLazy事务的返回或异常进行自定义操作。
因为我的RescheduleLazy很多,如果每个都包装嵌套一个Lazy进行处理很麻烦且不美观。
希望能得到帮助,感谢。
The text was updated successfully, but these errors were encountered: