【问题标题】:Timing mistake in Elixir GenServer tutorial?Elixir GenServer 教程中的时间错误?
【发布时间】:2014-11-06 17:32:28
【问题描述】:

我正在阅读 Elixir “入门”教程,其中使用了以下代码 sn-p:

test "removes buckets on exit", %{registry: registry} do
  KV.Registry.create(registry, "shopping")
  {:ok, bucket} = KV.Registry.lookup(registry, "shopping")
  Agent.stop(bucket)
  assert KV.Registry.lookup(registry, "shopping") == :error
end

现在,create/2 使用 cast 操作,而 lookup 使用 call。这意味着执行异步调用,然后立即执行假定异步操作成功执行的同步调用。当代码本身正确时,计时问题是否会导致测试失败,或者我是否缺少 castcall 的某些方面?

【问题讨论】:

    标签: erlang elixir gen-server


    【解决方案1】:

    由于 GenServer 顺序处理所有消息,lookup 调用将阻塞,直到前一个 cast 完成,因此不存在时间问题。

    【讨论】:

      猜你喜欢
      • 2017-10-16
      • 2016-03-14
      • 2018-12-14
      • 1970-01-01
      • 2021-03-03
      • 2017-02-17
      • 2019-11-28
      • 2016-03-20
      • 2015-01-17
      相关资源
      最近更新 更多