C#Task.ContinueWith()vs java?

时间:2017-07-01 11:30:01

标签: java c# guava completable-future

在C#中,Task类有ContinueWith方法,当任务运行完成状态时,将调用ContinueWith方法,而在JAVA中,有一些方法,如{{ 1}}?

我知道番石榴ContinueWith,但它使用新线程等待'任务'完成,是否等于C#listenablefuture

和JAVA 8 CompletableFuture ContinueWith具有相同的效果,那么C#whenComplete ContinueWith listenablefuture的区别是什么?

谢谢你!

1 个答案:

答案 0 :(得分:0)

.Net中的Task和Java中的CompletableFuture实现了非常相似的目的。它们提供对在不同线程中执行的内容(.Net中的TaskScheduler或Java中的Executor)的引用,并具有等待结果和/或在完成时执行不同操作的能力。

Task.ContinueWithCompletableFuture.whenComplete之间有一些区别。例如,传递给.Net版本的函数将Task本身作为参数,需要采取额外的步骤来获取其结果(或在必要时传播下游异常)。传递给Java版本的函数将任务的结果作为参数。

另一个显着差异是继续任务将在其上运行的线程。在.Net中,默认情况下它将在与主要任务不同的线程上运行。在Java中,默认情况下它将与主要任务在同一线程上运行。在两种情况下,都可以覆盖这些默认操作。