使用CqlSession,我被引导给我们多个CompletionStage。
我在使用thenApply之前先使用thenApplyAsync,两者都提供相同的签名,但是当我使用thenApplyAsync时,我的程序不再编译,并抛出以下错误。
>错误:(80,22)重载了方法值thenApplyAsync和替代方法: (x $ 1:java.util.function.Function [_>:com.datastax.oss.driver.api.core.cql.AsyncResultSet,_ <:data.model.stored.Company],x $ 2:java.util。并发执行器)java.util.concurrent.CompletionStage [data.model.stored.Company] (x $ 1:java.util.function.Function [_>:com.datastax.oss.driver.api.core.cql.AsyncResultSet,_ <:data.model.stored.Company])java.util.concurrent.CompletionStage [data.model.stored.Company] 无法应用于(com.datastax.oss.driver.api.core.cql.AsyncResultSet => data.model.stored.Company) .thenApplyAsync [StoredCompany]((_:AsyncResultSet)=>公司)
展望了这个问题之后,这两种方法应该具有相同的最终行为(除了异步处理另一个线程上的函数(在这种情况下由会话提供))。
在我将thenX更改为thenXAsync的每个地方,问题都是相同的,有一个示例部分:
session
.executeAsync(statement)
//.thenApplyAsync[Boolean](...) >> this one cause the error
.thenApply[Boolean]({ set: AsyncResultSet =>
optionRow(set) match {
case Some(row) => row.getBoolean(CqlConst.AppliedColumnName)
case None => throw new DataNotFoundException(id.toString)
}
})
两者之间的预期结果没有区别(异步版本的执行效率略低)