如何创建在创建后立即异步运行的 ScalaZ 任务?
Posted
技术标签:
【中文标题】如何创建在创建后立即异步运行的 ScalaZ 任务?【英文标题】:How to create ScalaZ Task which is running asynchronously right after creation? 【发布时间】:2017-03-10 04:51:13 【问题描述】:我需要已经在运行的 Scalaz Task
(或一些包装器),如果它完成了可以立即返回值,如果没有完成则等待一段时间。对于Future
,我可以这样做:
val f = myTask.get.started
这样我有Future
异步运行,它在f.run
上在计算完成后调用时立即返回结果,或者阻塞一段时间并等待完成,如果不是。但是,这样我就放松了错误处理。
如何拥有Task
而不使用Future
,但仍然让它异步运行之前 run
,或者runAsync
被调用?
【问题讨论】:
【参考方案1】:scalaz.Task
的目的是明确控制执行,这使得引用透明成为可能。如果您想分叉 Task
,请使用:
val result = Task.fork(myTask)
一旦您使用unsafe*
方法之一运行该任务,该任务就会在其自己的线程池中运行。
【讨论】:
谢谢,但这并不能解决我的问题。尽管如此,直到有人在上面调用run
,它才会运行。我需要一个任务,当它在创建后被调用足够长的时间时,立即返回值(因为在给定的时间内它是异步计算的)。如果我没记错的话,fork
不是这种情况。
它按预期工作。如果您想要在没有明确声明的情况下运行的东西,请使用Future
。以上是关于如何创建在创建后立即异步运行的 ScalaZ 任务?的主要内容,如果未能解决你的问题,请参考以下文章