在C#中,Task
类有ContinueWith
方法,当任务运行完成状态时,将调用ContinueWith
方法,而在JAVA中,有一些方法,如{{ 1}}?
我知道番石榴ContinueWith
,但它使用新线程等待'任务'完成,是否等于C#listenablefuture
?
和JAVA 8 CompletableFuture
ContinueWith
具有相同的效果,那么C#whenComplete
ContinueWith
listenablefuture
的区别是什么?
答案 0 :(得分:0)
.Net中的Task
和Java中的CompletableFuture
实现了非常相似的目的。它们提供对在不同线程中执行的内容(.Net中的TaskScheduler
或Java中的Executor
)的引用,并具有等待结果和/或在完成时执行不同操作的能力。
Task.ContinueWith
和CompletableFuture.whenComplete
之间有一些区别。例如,传递给.Net版本的函数将Task
本身作为参数,需要采取额外的步骤来获取其结果(或在必要时传播下游异常)。传递给Java版本的函数将任务的结果作为参数。
另一个显着差异是继续任务将在其上运行的线程。在.Net中,默认情况下它将在与主要任务不同的线程上运行。在Java中,默认情况下它将与主要任务在同一线程上运行。在两种情况下,都可以覆盖这些默认操作。