首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >什么时候使用CompletableFuture的非异步方法?

什么时候使用CompletableFuture的非异步方法?
EN

Stack Overflow用户
提问于 2018-04-04 11:00:14
回答 1查看 2.5K关注 0票数 12

我(主要)理解CompletableFuture的三种执行方法

  • 非异步(同步执行)
  • 默认异步(使用默认执行器进行异步)
  • 自定义异步(使用自定义执行器异步)

我的问题是:什么时候应该赞成使用非异步方法?

如果有一个调用也返回CompletableFuture的其他方法的代码块,会发生什么情况?表面上这看起来很便宜,但是如果这些方法也使用非异步调用,会发生什么呢?这难道不等于一个长的非异步块,可能会变得昂贵吗?

应该将非异步执行的使用限制在不调用其他方法的短的、定义良好的代码块上吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-04 11:23:58

什么时候应该赞成使用非异步方法?

连续任务的决定与先前任务本身的决定没有什么不同。您选择什么时候进行异步操作(例如,使用CompletableFuture)而不是编写纯同步代码?同样的指导原则也适用于此。

如果您只是简单地使用结果或使用完成信号来启动另一个异步操作,那么这本身就是一个廉价的操作,因此没有理由不使用同步完成方法。

另一方面,如果您将多个长期运行的操作链接在一起,每个操作本身就是一个异步操作,那么使用异步完成方法。

如果您处于中间位置,请相信您的直觉,或者只需使用异步完成方法。如果您没有协调数千个任务,那么您将不会增加大量的开销。

应该将非异步执行的使用限制在不调用其他方法的短的、定义良好的代码块上吗?

我会把它们用于运行时间不长的操作。您不需要将它们的使用限制为微不足道的简短和简单的回调。但我认为你有正确的想法。

如果您正在使用CompletableFuture,那么您已经决定至少在您的代码库中的某些操作需要异步执行,但可能并不是所有的操作都是异步的。您是如何决定哪个应该是异步的,哪个不应该是异步的?如果你把同样的分析应用于续集,我想你会没事的。

如果有一个调用也返回CompletableFuture的其他方法的代码块,会发生什么情况?表面上这看起来很便宜,但是如果这些方法也使用非异步调用,会发生什么呢?这难道不等于一个长的非异步块,可能会变得昂贵吗?

返回CompletableFuture通常意味着底层操作是异步进行的,因此应该不会出现问题。在大多数情况下,我希望流程看起来像这样:

  1. 同步调用返回CompletableFuture的异步方法。它调度一些异步操作以最终提供结果。您的呼叫几乎立即返回,没有阻塞。
  2. 完成后,可以调用一个或多个连续。其中一些可能会调用额外的异步操作。这些调用将调用将安排额外异步操作的方法,但与以前一样,它们几乎立即返回。
  3. 去(2),或完成。
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49649298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档