2016-10-27 5 views
1

すでに実行中のScalaz Task(または何らかのラッパー)が必要です。完了した場合はすぐに値を返し、そうでない場合は値を返します。場合完了を作成直後に非同期に実行されているScalaZタスクの作成方法は?

val f = myTask.get.started 

私はFuture計算が完了した後に呼び出されたときにf.runに戻ると、すぐにその結果が、非同期で実行されている、またはいくつかの時間のためにブロックして待機している。この方法は:Futureという点では、私はこのようにそれを行うことができますそうではない。しかし、このように私はエラー処理を緩めます。

どうTaskを持っているとFutureを使用していないが、それでも、それはすでにrun前に、非同期実行している、またはrunAsyncはそれで呼び出されますか?

答えて

0

scalaz.Taskの目的は、実行を明確に制御することで、参照透過を可能にします。あなたがTaskをフォークしたい場合は、使用します。

val result = Task.fork(myTask) 

とタスクは、できるだけ早くあなたがunsafe*のいずれかの方法でそれを実行すると、独自のスレッドプールで実行されます。

+0

ありがとうございますが、私の問題は解決しません。それでも、誰かがその上で '実行'を呼び出すまでは実行されていません。私は、それが作成された後、十分な時間が呼び出されたときに値を即時に返すタスクが必要です(与えられた時間は非同期に計算されたためです)。私が間違っていなければ、これは 'fork'の場合とは異なります。 – amorfis

+0

これは意図したとおりに動作しています。あなたが明示的な声明なしで動くものを望むなら、 '未来'を使ってください。 – Reactormonk

関連する問題