如何创建创建后立即异步运行的ScalaZ任务?
我需要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的
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
。