如何创建在创建后异步运行的ScalaZ Task?

时间:2016-10-27 13:20:10

标签: scala asynchronous task scalaz

我需要已经运行的Scalaz Task(或一些包装器),如果它已经完成,可以立即返回值,如果不是,则可以在一些等待之后返回值。就Future而言,我可以这样做:

val f = myTask.get.started

这样我Future异步运行,f.run在计算完成后立即返回结果,或者阻塞一段时间,如果不是则等待完成。但是,这种方式我失去了错误处理。

如何拥有Task而不使用Future,但仍然已经 run之前已经异步运行,或者runAsync被调用它?

1 个答案:

答案 0 :(得分:0)

scalaz.Task的意图是对执行的明确控制,这使得参考透明度成为可能。如果您要分叉Task,请使用:

val result = Task.fork(myTask)

,只要您使用unsafe*方法之一运行任务,任务就会在自己的线程池中运行。