Skip to content

Latest commit

 

History

History
54 lines (42 loc) · 1.24 KB

File metadata and controls

54 lines (42 loc) · 1.24 KB
  • 低レベル
    • spawn
    • メッセージの送受信
    • ノード
  • 中間
    • タスク
    • エージェント
  • 高レベル
    • GenServer
    • OTP

19.1 タスク

タスク: バックグラウンドで走る関数

Task.async(fun)

  • fun: 引数なしの関数

呼び出し元プロセスとリンクし、監視されたプロセスを生成し、タスクディスクリプタ(PIDと参照)を返す

Task.await(task, timeout \\ 5000)

  • task: タスクディスクリプタ
  • timeout: タイムアウトまでの時間
goh@goh% elixir tasks/task1.exs
Start the task
Do something else
Wait for the task
The result is 6765

`Task.async(module, function_name, args)

  • module: モジュール名
  • function_name: 関数名(atom)
  • args: 引数のリスト
goh@goh% elixir tasks/task2.exs
The result is 6765

タスクと監視

タスクはOTPサーバーなので、監視対象にできる

  1. async の代わりに await を使う
    タスク内の関数がクラッシュした場合、
  • start_link を使ってプロセスを生成
    => すぐに終了
  • async を使ってプロセスを生成
    => await が呼ばれたときに終了
  1. スーパーバイザからタスクを実行する