2014-09-12 68 views
1

我经历的万应灵药“入门”的教程,在使用下面的代码片段:Elixir GenServer教程中的计时错误?

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

回答

3

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