Elixir GenServer教程中的时间错误?

时间:2014-09-12 13:53:15

标签: erlang elixir gen-server

我正在浏览Elixir"入门"教程,其中使用了以下代码片段:

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的某些方面?

1 个答案:

答案 0 :(得分:3)

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

相关问题