我(主要)理解CompletableFuture的三种执行方法
我的问题是:什么时候应该赞成使用非异步方法?
如果有一个调用也返回CompletableFuture的其他方法的代码块,会发生什么情况?表面上这看起来很便宜,但是如果这些方法也使用非异步调用,会发生什么呢?这难道不等于一个长的非异步块,可能会变得昂贵吗?
应该将非异步执行的使用限制在不调用其他方法的短的、定义良好的代码块上吗?
发布于 2018-04-04 11:23:58
什么时候应该赞成使用非异步方法?
连续任务的决定与先前任务本身的决定没有什么不同。您选择什么时候进行异步操作(例如,使用CompletableFuture)而不是编写纯同步代码?同样的指导原则也适用于此。
如果您只是简单地使用结果或使用完成信号来启动另一个异步操作,那么这本身就是一个廉价的操作,因此没有理由不使用同步完成方法。
另一方面,如果您将多个长期运行的操作链接在一起,每个操作本身就是一个异步操作,那么使用异步完成方法。
如果您处于中间位置,请相信您的直觉,或者只需使用异步完成方法。如果您没有协调数千个任务,那么您将不会增加大量的开销。
应该将非异步执行的使用限制在不调用其他方法的短的、定义良好的代码块上吗?
我会把它们用于运行时间不长的操作。您不需要将它们的使用限制为微不足道的简短和简单的回调。但我认为你有正确的想法。
如果您正在使用CompletableFuture,那么您已经决定至少在您的代码库中的某些操作需要异步执行,但可能并不是所有的操作都是异步的。您是如何决定哪个应该是异步的,哪个不应该是异步的?如果你把同样的分析应用于续集,我想你会没事的。
如果有一个调用也返回
CompletableFuture的其他方法的代码块,会发生什么情况?表面上这看起来很便宜,但是如果这些方法也使用非异步调用,会发生什么呢?这难道不等于一个长的非异步块,可能会变得昂贵吗?
返回CompletableFuture通常意味着底层操作是异步进行的,因此应该不会出现问题。在大多数情况下,我希望流程看起来像这样:
CompletableFuture的异步方法。它调度一些异步操作以最终提供结果。您的呼叫几乎立即返回,没有阻塞。https://stackoverflow.com/questions/49649298
复制相似问题