2014-09-12 67 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因此應該沒有時間問題。