我希望用户可以运行带有回调的计时器并能够取消它。像这样的东西:
def main: F[Unit] =
for
cancel <- runTimer(callback, 5.seconds)
shouldCancel <- askUser
_ <- cancel.whenA(shouldCancel)
yield ()
就FS2的猫而言,我该如何做到这一点?
我希望用户可以运行带有回调的计时器并能够取消它。像这样的东西:
def main: F[Unit] =
for
cancel <- runTimer(callback, 5.seconds)
shouldCancel <- askUser
_ <- cancel.whenA(shouldCancel)
yield ()
就FS2的猫而言,我该如何做到这一点?
由于cats-effect在解决并发问题方面非常强大,您需要的代码实际上非常简单:
主要有以下几个方面:
IO.sleep
延迟回调的执行。uncancelable
使回调不可取消。IO.race
同时运行延迟回调和取消。如果cancel
在延迟之前完成,race
将取消回调的执行。您可以在此处查看运行代码的演示:https://scastie.scala-lang.org/BalmungSan/kL1zxOicSB6IegetK7AWLg/3