Kotlin supplyAsync与执行人同步

Kotlin supplyAsync与执行人同步,kotlin,completable-future,Kotlin,Completable Future,我想创建一个CompletableFuture,返回值在Kotlin中的特定执行器上运行 下面的代码工作得很好 return CompletableFuture.supplyAsync { val commandHandler = registry.get<TCommand, TResponse>(command::class.java) commandHandler.handle(command) } 我不知道它为什么不起作用。但以下方法确实有效

我想创建一个CompletableFuture,返回值在Kotlin中的特定执行器上运行

下面的代码工作得很好

return CompletableFuture.supplyAsync {
        val commandHandler = registry.get<TCommand, TResponse>(command::class.java)
        commandHandler.handle(command)
 }

我不知道它为什么不起作用。但以下方法确实有效:

return CompletableFuture.supplyAsync({
    val commandHandler = registry.get<TCommand, TResponse>(command::class.java)
    commandHandler.handle(command)
}, exec::execute)
如果您直接传递执行人,Kotlin将选择签名:

supplyAsync(supplier: Supplier<U>, executor: Executor)
supplyAsync(供应商:供应商,执行人:执行人)

看起来您无法混合界面和lambda样式。

如果创建函数,您可以混合它们。但在kotlin提供的扩展中,只要有可能,它们就不会混合lambda/方法引用参数和实例参数。可能接受lambdas的是内联的,他们这样做是出于性能原因。
return CompletableFuture.supplyAsync({
    val commandHandler = registry.get<TCommand, TResponse>(command::class.java)
    commandHandler.handle(command)
}, exec::execute)
supplyAsync(supplier: () -> U, executor: (Runnable)-> Unit)
supplyAsync(supplier: Supplier<U>, executor: Executor)