Em (Java) de programação reativa, que é a diferença entre um Future<T>
e um ( projecto de reactor ) Mono<T>
? Ambos parecem ser os meios para acessar o resultado de uma computação assíncrona em um momento no futuro, quando o cálculo está completo. Por que introduzir a Mono
interface se Future
já faz o trabalho?
A maior diferença é que um Mono<T>
pode ser totalmente preguiçoso, enquanto que quando você se apossar de um Future<T>
, o processamento subjacente já começou.
Com um frio típico Mono
, nada acontece até que você subscribe()
a ele, o que torna possível passar a Mono
volta na aplicação e enriquecê-lo com operadores ao longo do caminho, antes mesmo de começar o processamento.
É também muito mais fácil de manter as coisas assíncrona usando uma Mono
comparação com um Future
(onde a API tende a levá-lo para chamar o bloqueio get()
).
Finalmente, em comparação com ambos Future
e CompletableFuture
, o aspecto da composição é melhorada em Mono
com a extenso vocabulário de operadores que ele oferece.