我需要已经运行的Scalaz Task
(或一些包装器),如果它已经完成,可以立即返回值,如果不是,则可以在一些等待之后返回值。就Future
而言,我可以这样做:
val f = myTask.get.started
这样我Future
异步运行,f.run
在计算完成后立即返回结果,或者阻塞一段时间,如果不是则等待完成。但是,这种方式我失去了错误处理。
如何拥有Task
而不使用Future
,但仍然已经 run
之前已经异步运行,或者runAsync
被调用它?
答案 0 :(得分:0)
scalaz.Task
的意图是对执行的明确控制,这使得参考透明度成为可能。如果您要分叉Task
,请使用:
val result = Task.fork(myTask)
,只要您使用unsafe*
方法之一运行任务,任务就会在自己的线程池中运行。