比起自己寫 spawn
來執行非同步工作, Task 模組有許多替我們包裝好的非同步 task 函式
要非同步的執行程式,並在稍後要同步的取得結果
price_task =
Task.async(fn ->
Process.sleep 2000 # 假裝使用外部 API 要等兩秒
300 # 回傳
end)
# 做其他事情
Task.await(price_task)
要注意的是
await/2
第二個變數是 timeout 時間,預設是 5000,可以是 :infinity
await/2
會 block 直到 task 結束或 timeoutasync
後一定要有 await
來接收,如果不在乎執行結果,使用 start
如果不在乎執行後的結果,也不在乎有沒有成功,可以使用 Task.start/1
Task.start(fn ->
Process.sleep 2000 # 做了一些事
end)