如何创建创建后立即异步运行的ScalaZ任务?

如何创建创建后立即异步运行的ScalaZ任务?,scala,asynchronous,task,scalaz,Scala,Asynchronous,Task,Scalaz,我需要ScalazTask(或某个包装器),它已经在运行,如果完成了,可以立即返回值,如果没有完成,可以在等待一段时间后返回值。就未来而言,我可以这样做: val f = myTask.get.started 通过这种方式,我可以异步运行Future,在f.run上,当计算完成后调用它时,它会立即返回结果,或者阻塞一段时间并等待完成(如果没有)。然而,这样我就失去了错误处理 如何拥有Task而不使用Future,但在run之前,它仍然异步运行,或者调用runAsync?scalaz.Task的

我需要Scalaz
Task
(或某个包装器),它已经在运行,如果完成了,可以立即返回值,如果没有完成,可以在等待一段时间后返回值。就未来而言,我可以这样做:

val f = myTask.get.started
通过这种方式,我可以异步运行
Future
,在
f.run
上,当计算完成后调用它时,它会立即返回结果,或者阻塞一段时间并等待完成(如果没有)。然而,这样我就失去了错误处理


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

scalaz.Task
的目的是明确控制执行,这使得引用透明成为可能。如果要完成
任务
,请使用:

val result = Task.fork(myTask)

只要您使用一种
不安全*
方法运行该任务,它就会在自己的线程池中运行。

scalaz的意图是
task
可以清楚地控制执行,这使得引用透明成为可能。如果要完成
任务
,请使用:

val result = Task.fork(myTask)

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

谢谢,但它不能解决我的问题。尽管如此,直到有人对它调用
run
,它才会运行。我需要一个任务,当它在创建后足够长的时间内被调用时,它会立即返回值(因为在给定的时间内,它是异步计算的)。如果我没弄错的话,
fork
就不是这样了。它按预期工作。如果您想要运行没有显式语句的东西,请使用
Future
。谢谢,但这并不能解决我的问题。尽管如此,直到有人对它调用
run
,它才会运行。我需要一个任务,当它在创建后足够长的时间内被调用时,它会立即返回值(因为在给定的时间内,它是异步计算的)。如果我没弄错的话,
fork
就不是这样了。它按预期工作。如果您想要在没有显式语句的情况下运行某些内容,请使用
Future