异步任务流程编排

54 天前
 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 )应该怎么写

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

这个?

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

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

https://tanronggui.xyz/t/1097814

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

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

© 2021 V2EX