【发布时间】:2013-05-29 16:27:56
【问题描述】:
我有一个actor,它在接收到消息时,在文件系统中搜索文件并返回文件的完整路径。
为了保持异步,我做了:
def receive = {
case s:String => {
val f = future{
val ans = search(s)
println("Input Request: "+s+" output:"+ans+" "+sender.path)
}
f.onComplete{
case Success(x) => sender ! x
case Failure(y) => println("Could not complete it")
}
}
}
但我观察到它会将消息返回给akka://FileSystem/deadLetters,而不是sender。文档说:
仅在 Actor 内部有效,因此不要关闭它并 * 发布到其他线程!
这是否意味着,我必须保持同步?还有其他方法吗?
【问题讨论】:
-
为什么要使用未来?这是一个 I/O 操作(因此可能是阻塞的),所以将参与者放在阻塞 io 调度程序上。如果您需要一次搜索多个文件,请运行多个实例。