2017-11-07 7 views
0

종료 아니에요 배우 종료하는 방법 (면책 조항 : 나는 akka와 초보자 미만 해요)Akka는 : 그것은

한다고 가정 나는 그것이 극단적 인 예입니다 (종료 결코 메소드를 호출 배우가 당신을 장기간에 종료 할 수있는 기회를 가진 메소드를 호출하는 것에 대해 생각할 수 있습니다. 예를 들어

(자바) 메시지를 처리하는 동안

public static class InfiniteLoop{ 
    public static int neverReturns(){ 
     int x = 0; 
     while(true){ 
     int++; 
     } 
     return x; 
    } 
} 

지금 경우, 배우가 배우를 종료하지 않습니다

InfiniteLoop.neverReturns() 

를 호출합니다.

아직 메시지를 처리하는 중 죽이는 방법이 있습니까? 그렇다면 백그라운드에서 루프가 계속 진행됩니까? Akka 이러한 일을 구현하는 방법은 없습니다

답변

2

은 (AN akka 시스템에서 "무한 루프"스타일의 오류를 복구 할 수있는 방법이 있다면 제가 이해하려고 노력하고있어입니다). 액터를 정지시키는 모든 메소드는 액터에 메시지를 보내는 것에 의존합니다. 액터가 루프 때문에 현재 메시지를 처리하지 못하면 멈추라는 메시지를 결코 처리하지 않습니다. 이것은 akka 배우 모델의 기본입니다. 사서함의 메시지는 순서대로 처리됩니다. 나는 그 방법을 찾을 방법이 없다고 생각합니다. 배우 중지/살인 옵션에 대한이 기사를 확인하십시오 : https://petabridge.com/blog/how-to-stop-an-actor-akkadotnet/. 중지 방법의 의미가 각 메소드마다 어떻게 변하는지를 볼 수 있지만, 모두 배우에게 메시지를 보내는 것으로 시작합니다.

왜 이런 일이 필요한지 알면 좋을 것입니다. 기본 요구 사항이 더 akka-ish 방식으로 구현 될 수 있습니다. 예를 들어 액터가 다음 메시지를 전달할 수 있다면 잠재적으로 차단 액션이 래핑 될 수 있습니다.

+0

내가 잘 지내고 있다면, 다음과 같이 제안합니다. 미래에 전화를 걸고, 다음에 제한 시간 전화를 취소 한 후 (true) 장래에 전화를 끊으십시오. 이것이 작업의 중단을 보장합니까? – Gabriele

+0

사실 나는 그것이 작업의 중단을 보장하지 않는다고 생각합니다. 작업을 처리해야합니다. 내 제안은 초기 제안이었고 어떤 것이 효과가 있는지 알아야만합니다. – Pedro

+0

여기에서 처리 할 아이디어를 얻을 수 있습니다. https://techblog.bozho.net/interrupting-executor-tasks/ – Pedro