我正在尝试使用Reference取消erlang计时器

d5vmydt9  于 2022-12-16  发布在  Erlang
关注(0)|答案(1)|浏览(180)

我用:timer.apply_after/4函数创建了一个计时器

{:ok, ref} = :timer.apply_after(60000, Module , :function , [args])

这里返回的ref是这样的元组

{-6451215415 , #Reference<0.265269.0.1654156.8484>}

我想在实施之前取消这个过程,有办法吗?
我试过了

:timer.cancel(ref)

但返回参数错误。2如何在时间结束前取消该计时器?

bwntbbo3

bwntbbo31#

这当然是可能的,并按预期工作:

iex|1 ▶ {:ok, ref} = :timer.apply_after(1_000, IO, :inspect, ["¡Hola!"]) 
#⇒ {:ok, {-576460467744153, #Reference<0.2854054855.1602748417.47727>}}
# ... # after 1 second:
#⇒ "¡Hola!"

iex|2 ▶ with {:ok, ref} <-
...|2 ▶     :timer.apply_after(1_000, IO, :inspect, ["¡Hola!"]),
...|2 ▶   do: :timer.cancel(ref)
#⇒ {:ok, :cancel}

相关问题