[quote=matheuslmota][quote=lkbm]
Mas quando o desenvolvedor precisar obter o resultado de uma operação pra prosseguir com o fluxo da aplicação, ainda pode ocorrer o bloqueio.
[code]future = conn.transactAsync(tx);
… // fluxo normal da aplicação
txResult = future.get(); // vai bloquear se tx ainda não estiver concluída (ou abortada)
[/code]
Novamente, a solução neste caso é desenvolvedor que sabe o que esta fazendo, e não funcionalidade X ou Y.
No caso do CQRS (que é um paradigma orientado a dados, e incompatível com objetos) sei que é indicado para cenários com muitas operações de leitura. Não acho que seja uma boa idéia para cenários com muitas operações de escrita, assíncronas ou não, devido as operações serem processadas serialmente no command model.[/quote]
Mas ai é que tá, você deve usar da assincronia justamente quando você não precisa do resultado da execução. Para operações de alteração / inserção de dados em um banco, por exemplo, esse é o caso adequado em muitas vezes. E incrivelmente isso se adequa até mesmo para operações de leita. Isso mesmo, podemos fazer leitura de dados de forma assíncrona. Onde trabalho estamos desenvolvendo o BackEnd de um sistema usando o paradigma de atores (com o framework akka). Estamos criando uma API de persistência completamente assíncrona. A grande vantagem é que isso vai nos ajudar muito na hora de escalar a nossa aplicação, que tem como grande gargalo hoje o banco de dados. E antes que pergunte, obivamente estamos tendo cuidado para não ter provlemas de inconsistência que podem vir com a assincronia se trabalhada da forma errada. [/quote]
Toda operação envolvendo atores é assíncrona, não importa se leitura ou escrita. É uma característica própria das linguagens que seguem o modelo distribuído de troca de mensagens. Programas C#, Java, C++ seguem um modelo diferente, que eu chamaria de local orientado a objetos.
Não sou muito familiar com o modelo distribuído, mas sei que ele faz sucesso em sistemas… distribuídos… onde os requisitos são bem diferentes dos requisitos esperados para uma aplicação de banco de dados.