异步任务流程编排

1 天前
 Edsie

最近需要写一个 mock 工具,其中需要对一系列的动作进行编排和模拟,在使用 Java 的 CompletableFuture 时,发现缺少一下方法,自己 wrap 了下提供几个拓展方法,用法如下

CompletableFutureEx
        .runAsync(() -> print("one"))
        .thenRunAsync(() -> print("two"))
        .thenRunWithRetry(500, i -> {
            print("three: retry " + i);
            return i > 5;
        })
        .thenWaitMills(1000)
        .thenRunAsync(() -> print("four"))
        .thenWaitSignal(signal)
        .thenRunAsync(() -> print("five"));

完整代码在: https://gist.github.com/haomega/cfae14f47054e36d7c3ae4ac3e7cf90b

还有更好的方法或工具么,目前 cancel 貌似不太方便,不能简单的 cancel 掉一个完整的链路 如果是其他语言( golang )应该怎么写

1261 次点击
所在节点    程序员
6 条回复
rexinshimin
1 天前
京东好像有一款,不过看样子,很久不更新了。可参考一下。https://gitee.com/jd-platform-opensource/asyncTool
yazinnnn0
1 天前
https://www.reactivemanifesto.org/zh-CN
https://www.reactive-streams.org/

这个?

reactivex 有大多数语言的 reactive 实现, 包括 go
jvm 上的 reactive 实现还有 reactor smallrye-mutiny kotlin 协程
Edsie
1 天前
@yazinnnn0 看起来是的
ychost
1 天前
kotlin 就很好实现,开个 Coroutine 得到 job 随时可以 cancel ,Java 要实现建议用 reactive 吧这个更成熟
securityCoding
1 天前
编排的话看看 dag 这块有没有的合适库
CynicalRose
4 小时 57 分钟前
reactive 那套真的要了老命了,write once spring gateway ,debug everywhere 🤣

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1097814

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX