scala-async的真实用例?

时间:2014-04-01 21:57:18

标签: scala asynchronous concurrency future

今天我研究了使用scala-async实现一些非常基本的东西,即一个可能失败的函数的重试循环。

首先,我无法在await()块中使用try/catch;很好,这是我猜的;所以我将函数转换为返回Future[Try[T]],这当然在正常情况下是多余的,因为Future[T]已经包含任何异常但允许我在返回值上调用isSuccess而不是{ {1}}。

然后我继续尝试实现循环逻辑。嵌套的递归try/catch是不可能的(再次,如预期的那样),因为iter()不能在嵌套函数中使用。与一个好的await()一起开始使我成功,因为我实际上正在尝试while函数,所以我并不关心返回值;但是,一旦我更改为Future[Try[Unit]]并因此开始关注返回值,我就需要保存Future[Try[Int]]来自Try[Int]的呼叫,以便不仅能够如果await()检查它,但也返回其内容。但是,只要我尝试isSuccess,我就会收到错误消息:

  

val ret = await(...)

所以我的问题是,给出(至少)这三个限制,我说的最后一个限制是极其有限的,至少看似使得scala-async对于任何现实生活代码都没有用,除了仔细选择的例子如await must not be used under a by-name argument,这个库目前已知的实用应用程序是什么?

0 个答案:

没有答案