小编sab*_*bee的帖子

Scala期货:如何保证非空结果?

假设我有一个返回的方法CompleteableFuture[Data]:

def doIt(): CompleteableFuture[Data] = { ... }
Run Code Online (Sandbox Code Playgroud)

而且,有一个非零的机会doIt()可以回归null.我们如何调用,doIt()直到结果不是null没有阻塞调用线程?Scala的方法是什么?

我目前的尝试:

Future {
  var data: Data = null
  blocking {
    while (data == null) { data = doIt().get }
  }
  data
} 
Run Code Online (Sandbox Code Playgroud)

我宁愿不使用blockingget.有任何想法吗?

此外,map在事实发生后,有人呼吁这个未来:

val myFuture = Future {
  var data: Data = null
  blocking {
    while (data == null) { data = doIt().get }
  }
  data
}.map { d => d.someMember } 
Run Code Online (Sandbox Code Playgroud)

d.someMemberNullPointerException …

java concurrency asynchronous scala completable-future

1
推荐指数
1
解决办法
119
查看次数