2016-10-27 2 views
1

이미 실행중인 Scalaz Task (또는 일부 래퍼)이 필요하며 완료되면 즉시 값을 반환하거나 그렇지 않으면 값을 반환 할 수 있습니다. Future의 관점에서 나는 이런 식으로 그것을 할 수 :생성 직후 비동기 적으로 실행되는 ScalaZ 작업을 만드는 방법은 무엇입니까?

val f = myTask.get.started 

f.run 수익률 계산이 완료, 또는 약간의 시간에 대한 블록 및 완료 경우까지 대기 후에 호출 할 때 즉시 결과를 비동기 적으로 실행 내가 Future이이 방법을, 그렇지 않습니다. 그러나,이 방법은 내가 느슨한 오류 처리.

어떻게 Task을 가지고 Future를 사용하지,하지만 여전히 이미run 전에 비동기 실행, 또는 runAsync 그것에이라고 하는가?

답변

0

scalaz.Task의 의도는 참조 투명성을 가능하게하는 실행에 대한 명확한 제어입니다. 당신이 Task를 포크 할 경우, 사용

val result = Task.fork(myTask) 

하고 작업은 바로이 unsafe* 방법 중 하나를 실행으로 자신의 스레드에서 실행됩니다.

+0

감사합니다. 그러나 문제가 해결되지 않습니다. 아직도, 누군가 실행되기 전까지는 실행되지 않습니다. 생성 후 충분한 시간이 주어 졌을 때 즉시 값을 반환하는 작업이 필요합니다 (주어진 시간에 비동기로 계산되기 때문에). 내가 잘못하지 않는다면'fork'와 같은 경우는 아닙니다. – amorfis

+0

의도 한대로 작동합니다. 당신이 명시 적 진술없이 실행되는 것을 원한다면,'Future'를 사용하십시오. – Reactormonk

관련 문제