2014-12-08 14 views
6

Tôi biết rằng không an toàn khi đóng cuộc gọi phương thức sender hoặc trạng thái bên trong của diễn viên trong Tương lai hoặc lịch biểu, nhưng ngữ cảnh diễn viên thì sao? những gì đang có trong một ActorContext? Có an toàn khi đóng ngữ cảnh diễn viên trong một trình lên lịch hoặc cuộc gọi lại trong tương lai, như thế này không? :có an toàn khi đóng ngữ cảnh diễn viên trong bộ lập lịch akka

def receive: Receive = { 
    case Msg => 
    system.scheduler.scheduleOnce(1 second) { 
     context.actorOf[ChildActor] 
    } 
} 
+0

Tôi tin rằng nó an toàn khi đóng cửa trạng thái của một diễn viên nếu nó không thay đổi. Tôi không chắc liệu 'context' có thay đổi hay không. Ngay cả khi nó được, việc đóng trên một bối cảnh sẽ gửi bối cảnh trên một mạng nếu đó là một diễn viên từ xa (chạy trong chế độ cụm Akka) –

+0

Vâng ... Không phải là không. http://stackoverflow.com/questions/11170557/in-akka-is-actorcontext-thread-safe – LMeyer

+1

Tốt hơn để người lập lịch gửi một tin nhắn khác tới 'self' và sau đó để cho diễn viên tạo ra đứa trẻ đó. – Ryan

Trả lời

6

Không, không an toàn để đóng trên bối cảnh diễn viên. Từ akka source:

/** 
    * Stores the context for this actor, including self, and sender. 
    * It is implicit to support operations such as `forward`. 
    * 
    * WARNING: Only valid within the Actor itself, so do not close over it and 
    * publish it to other threads! 
    * 
    * [[akka.actor.ActorContext]] is the Scala API. `getContext` returns a 
    * [[akka.actor.UntypedActorContext]], which is the Java API of the actor 
    * context. 
    */ 
implicit val context: ActorContext = { ... 
+1

Nên đọc kỹ javadoc hoặc mã nguồn. Cảm ơn nhiều. – xiefei

Các vấn đề liên quan