2016-06-04 3 views
0

간단한 일이지만 스칼라에서 어떻게 할 수 있는지 잘 모릅니다. Futuretrue을 반환하고 싶습니다. 나는 트위터 Future을 사용합니다. 하지만 가능한 한 빨리 돌려주고 싶습니다. 좋아요 :스칼라 : 반환하지만 실행이 중지되지 않습니다.

def saveOrUpdate(pageImpression: PageImpressions): com.twitter.util.Future[Boolean] = { 
    return com.twitter.util.Future.value(true) 
    count += 1 
    println(count) 
} 

하지만 이것은 작동하지 않습니다. 어떻게하면 반환 할 수 있지만 실행을 계속할 수 있습니까? 그것은 HTTP 서비스입니다. 리턴 값은 HTTP 클라이언트로 리턴됩니다.

+0

http 서비스를 만들기 위해 어떤 라이브러리를 사용합니까? – maks

+0

직접 http가 아니지만 설명을하기에 조금 짧습니다. :) 나는 근검을 사용합니다. 이게 조금 문제가 해결되었거나 성능이 약간 향상 되었기를 바랍니다. http://stackoverflow.com/questions/37626924/finagle-no-asyncronous-executing –

+0

Finagle에서 http 요청에 대한 응답으로 Future를 반환합니다. 이는 서비스 스레드가 즉시 다른 요청을 인식 할 수 있음을 의미합니다. 그게 당신 질문 이었나요? – maks

답변

0

나는 당신이 찾고있는 정확하게 이해 잘 모르겠지만,이 같은 것을 원하는 것처럼 보인다 : 그것은 백그라운드 스레드에서 그것을 밖으로 카운트를 증가하고 인쇄하는 일을두고

def saveOrUpdate(pageImpression: PageImpressions) { 
    FuturePool.unboundedPool { 
    count += 1 
    println(count) 
    } 
    Future.value(true)  
} 

을 , 즉각적인 미래를 true으로 반환합니다.

그러나 이것은 여러 가지면에서 잘못된 행동입니다. 나는 그것을 전혀 추천하지 않는다. 우선, 가변 변수에 대한 비동기 액세스가 있습니다. 이 큰 문제를 일으 킵니다.

두 번째로 기본 작업을 실제로 완료했는지 여부에 관계없이 무조건적으로 true을 반환합니다. 집행 결과에 신경 쓰지 않는다면 Boolean이 아니라 Unit (미래)을 반환해야합니다.

+0

스칼라로 1 년 이상 지났습니다. 결국이 방법이 아니라는 것을 알고 있습니다. ;) –

관련 문제