gpt4 book ai didi

scala - 是否有更好的 monadic 抽象替代方案来表示长时间运行的异步任务?

转载 作者:行者123 更新时间:2023-12-01 03:37:49 39 4
gpt4 key购买 nike

Future擅长表示将/应该在某个固定时间内完成的单个异步任务。

但是,存在另一种异步任务,其中不可能/很难确切知道何时完成。例如,特定字符串处理任务所花费的时间可能取决于各种因素,例如输入大小。

对于这些类型的任务,通过检查任务是否能够在合理的时间内取得进展而不是通过设置硬超时值(例如 Future)来检测失败可能会更好。 .

是否有任何库为 Scala 中的此类任务提供合适的 monadic 抽象?

最佳答案

您可以使用这样的值流:

sealed trait Update[T]
case class Progress[T](value: Double) extends Update[T]
case class Finished[T](result: T) extends Update[T]

让您的任务在方便时发出 Progress 值(例如,每次计算的一个块完成时),并在完成计算后发出一个 Finished 值。消费者可以检查进度值以确保任务仍在取得进展。如果消费者对进度更新不感兴趣,您可以将它们过滤掉。我认为这比基于 Actor 的方法更具组合性。

根据您需要多少性能或纯度,您可能需要查看 akka streamsscalaz streams . Akka 流具有用于构建流图的纯 DSL,但在处理阶段允许可变性。 Scalaz 流功能更强大,但我最近听说的性能较低。

关于scala - 是否有更好的 monadic 抽象替代方案来表示长时间运行的异步任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33098157/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com