Estou trabalhando com Spring WebFlux e preciso realizar uma tarefa assíncrona como parte de um método que não deve bloquear a resposta principal ao usuário. Especificamente, quero chamar um método assíncrono após concluir a tarefa principal, mas sem atrasar a resposta.
Aqui está uma versão simplificada do que estou tentando alcançar:
public MonopublishPackage(RequestDTO requestDTO) { return publishPackageService.doSomething(requestDTO) .flatMap(responseDTO -> doSomethingInAsync(requestDTO, responseDTO) .thenReturn(responseDTO) ); } // Method that simulates an asynchronous task with a 5-second delay public Mono doSomethingInAsync(RequestDTO requestDTO, ResponseDTO responseDTO) { return Mono.delay(Duration.ofSeconds(5)) .then(); // Converts the delayed Mono to Mono }
Após a conclusão desta chamada, desejo executar doSomethingInAsync(requestDTO, responseDTO) de forma assíncrona.
O método doSomethingInAsync não deve bloquear e não atrasar a resposta principal.
Problema:
O método doSomethingInAsync está sendo executado, mas parece que pode estar bloqueando a resposta ou não sendo executado de forma assíncrona conforme pretendido. Como posso garantir que doSomethingInAsync seja executado de forma assíncrona e não bloqueie a resposta ao usuário?
Detalhes:
publishPackageService.doSomething(requestDTO): Retorna um Mono.
doSomethingInAsync(requestDTO, responseDTO): É um método assíncrono que desejo executar sem bloquear a resposta.
Questões:
Como posso garantir que doSomethingInAsync seja executado em segundo plano sem bloquear a resposta?
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3