CompletableFuture是否必须为AAsync Spring Boot 注解使用返回类型?

gopyfrb3  于 2022-11-23  发布在  Spring
关注(0)|答案(1)|浏览(134)

我想在方法上使用@Async注解来异步运行它。我已经定义了我的ThreadExecutor如下:

@Bean("threadPoolTaskExecutor")
public TaskExecutor getAsyncExecutor() {
    ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
    executor.setCorePoolSize(20);
    executor.setMaxPoolSize(200);
    executor.setWaitForTasksToCompleteOnShutdown(true);
    executor.setAwaitTerminationSeconds(30);
    executor.setThreadNamePrefix("async-");
    executor.setQueueCapacity(50);
    executor.initialize();
    return executor;
}

我的问题是,对于使用@Async注解的方法,是否必须使用CompletableFuture作为返回类型?如果我的第三方REST调用返回不同的/Custom类型,它是否有效?例如,

@Async("threadPoolTaskExecutor")
    public ResponseDTO getCapa(final List<String> vins) {
        for (String vin : vins) {
            CapabilityDTO capabilityDTO = new CapabilityDTO();
                // call third party 
                Optional<ResponseDTO> response=thirdPartyClient.getInfo();
                ..........
                 return response.get();
               }
           }

或者必须使用CompletableFuture<ResponseDTO>??

vohkndzv

vohkndzv1#

根据the Spring Async javadoc
返回类型被限制为voidFuture。在后一种情况下,您可以声明更具体的ListenableFutureCompletableFuture类型,这允许与异步任务进行更丰富的交互,并允许立即组合进一步的处理步骤。
实际上,我相信如果声明另一个类型,调用者将收到一个null值,因为在调用时没有可用的值,它必须立即返回,因此调用者将无法检索结果。

相关问题