gpt4 book ai didi

java - 如何链接可完成的 future

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:20:54 26 4
gpt4 key购买 nike

我现在有三个函数 updateFieldFromCollection1()insertFromCollection1ToCollection2()deleteFromCollection1()

这些调用本身并不相互依赖,但是当我想在 completableFuture 中将它们链接起来时,它们必须按照给定的顺序一个接一个地运行。

update-> insert -> delete

调用不返回任何内容,所以我使用 completableFuturerunAsyncthenRun 方法。并相应地将它们链接起来。我正在迭代 msgIds,它是一个字符串列表。

msgIds.stream().forEach(msgId -> CompletableFuture.runAsync(() ->  
{updateFieldFromCollection1()}).thenRun(() ->
{insertFromColletion1ToCollection2()}).thenRun(() ->
{deleteFromCollection1()}));

以上代码有效(更新-> 插入-> 删除已完成)但会抛出类似 duplicateKey 和 bulkwrite 的异常。我确信问题的出现是因为在前一个线程完成其任务之前另一个线程正在启​​动。我希望它们异步运行,但我想通过避免冲突来约束线程。
我不确定我需要在哪里调整代码。

最佳答案

msgIds.stream().forEach(msgId -> {
updateFieldFromCollection1();
CompletableFuture.runAsync(() ->
{insertFromColletion1ToCollection2()}).thenRun(() ->
{deleteFromCollection1()}));

更新必须在 completableFuture 之外进行。然后它就像一个魅力:)

关于java - 如何链接可完成的 future ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57425670/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com