0

After starting an actor

val a = actor {
  loop {
    react {
      case "end" => exit
      ...
    }
  }
}

And sending "end" message to it

a ! "end"

I want to make sure the thread is finished. How can it be joined?

kawty
  • 1,656
  • 15
  • 22

2 Answers2

2

As far as I know an actor can't be joined explicitly as in the Java-way. The concept is to introduce event-based programming, so it should only react on events. You can trap the exit however and link your initial actor (A) to the ending actor (B) via link. That way the initial actor A receives an event when B ends. If you don't get any event you know the actor hasn't terminated. See the thread here: https://stackoverflow.com/a/4304602/999865

If you don't care about resources and knows that the thread will terminate you can also make the actor inherit from DaemonActor. Daemon actors doesn't block any system resources.

Community
  • 1
  • 1
Jens Egholm
  • 2,730
  • 3
  • 22
  • 35
2

Seems to me that the "actor-way" of doing what you want is actually have your actor reply with a message "Done" to the requester, so it can take action. That way it is all still asynchronous event handling

Anne
  • 163
  • 6