CompletionStage-thenX / thenXAsync:相同的方法签名,一个编译而另一个不签名

时间:2019-04-24 18:16:01

标签: java scala asynchronous

使用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)
    }
  })

两者之间的预期结果没有区别(异步版本的执行效率略低)

0 个答案:

没有答案