我遇到了这个scala.concurrent.blocking方法,根据Scala文档,这是......
用于指定可能阻塞的代码段,允许当前的BlockContext调整运行时的行为.正确标记阻塞代码可以提高性能或避免死锁.
我有些疑惑:
scala.concurrent.ExecutionContext.Implicits.global执行上下文或用户创建的执行上下文?blocking {... 包装任何可执行文件会发生什么}?我有一个生成的java接口,包含一个方法:
public Future<?> getCustomersAsync(AsyncHandler<Customer> asyncHandler);
Run Code Online (Sandbox Code Playgroud)
我想用Akka实现它.我写了以下内容:
override def getCustomerAsync(asyncHandler: AsyncHandler[Customer]): Future[_] = {
myActorRef.ask(GetCustomer, system.actorOf(Props[Responder]))
}
Run Code Online (Sandbox Code Playgroud)
问题是ask退货scala.concurrent.Future[Any]和方法必须返回java.util.concurrent.Future[?].
Error:(33, 17) type mismatch;
found : scala.concurrent.Future[Any]
required: java.util.concurrent.Future[?]
myActorRef.ask(GetCustomer, system.actorOf(Props[Responder]))
^
Run Code Online (Sandbox Code Playgroud)
我该怎么做这个转换?
这是我上一个问题的后续内容.
假设我有一个执行可中断阻塞调用的任务.我想将其作为a运行Future并使用方法取消它.failurePromise
我希望取消工作如下:
如果一个人在完成任务之前取消了该任务,我希望任务"立即"完成,如果已经启动了阻止调用,我将Future要调用阻塞调用onFailure.
如果在任务完成后取消任务,我希望获得一个状态,说明由于任务已经完成,取消失败.
是否有意义?是否可以在Scala中实现?有这样的实现的例子吗?
我写了一个基于随机性生成迷宫的函数.大多数时候,这个功能非常快.但每隔一段时间,由于随机数运气不好,需要几秒钟.
我想多次并行启动这个功能,让最快的功能"赢".
Scala标准库(或Java标准库)是否为此作业提供了合适的工具?
我需要运行两个并行计算,并在第二个完成时中断第一个计算.目前,我已使用标准Java线程实现它:
/**
* Runs <var>sup</var> in parallel with <var>main</var>.
* Terminate (interrupt) it when <var>main</var> finishes.
*/
def support[R](sup: => Unit, main: => R): R = {
val supThread = new Thread {
override def run = { sup };
}
supThread.start();
try {
main;
} finally {
supThread.interrupt();
}
}
Run Code Online (Sandbox Code Playgroud)
使用Scala的并发库可以实现相同的行为,而不使用Thread显式的s吗?
我不明白为什么Scala Future比Twitters更难使用并且功能更少,而第一个是在第二个之后创建的.所以,这里有一些问题scala.concurrent.Future:
Future.onComplete返回Unit而不是Future?可组合方法更方便.Future不支持取消?