2

我正在尝试使用 Akka 框架同时写入多个文件,首先我创建了一个名为 MyWriter 的类来写入文件,然后使用期货我调用该对象两次跳跃,将为我创建 2 个文件,但是当我监控程序的执行,它首先填充第一个文件,然后是第二个文件(阻塞/同步)。

问:如何使下面的代码运行(非阻塞/异步)

import akka.actor._
import akka.dispatch._
import akka.pattern.ask
import akka.util.Timeout

import scala.concurrent.Await
import scala.concurrent.duration._
import scala.concurrent.Future
import scala.concurrent.{ ExecutionContext, Promise }
import ExecutionContext.Implicits.global

class my_controler {

}

object Main extends App {

  val system = ActorSystem("HelloSystem")
  val myobj = system.actorOf(Props(new MyWriter), name = "myobj")
  implicit val timeout = Timeout(50 seconds)
  val future2 = Future { myobj ! save("lots of conentet") }
  val future1 = Future { myobj ! save("event more lots of conentet") }

}

MyWriter 代码:

case class save(startval: String)

class MyWriter extends Actor {
  def receive = {
    case save(startval) => save_to_file(startval)
  }

任何想法为什么代码不能同时执行?

4

1 回答 1

4

你为什么?用一个额外的来包装电话Future?Ask ( ?) 无论如何都会返回 a Future,所以你在这里所做的就是将 a 包裹Future在另一个周围Future,我不确定这就是你想要做的。

我看到的第二个问题是您正在向同一个参与者实例发送两条消息,并且您希望它们并行运行。演员实例串行处理其邮箱。如果您想同时处理,那么您将需要您的FileWriter演员的两个实例来完成。如果这就是您想要做的,那么只需启动另一个实例FileWriter并向其发送第二条消息。

于 2013-05-19T13:53:42.303 回答