- 低レベル
- spawn
- メッセージの送受信
- ノード
- 中間
- タスク
- エージェント
- 高レベル
- GenServer
- OTP
タスク: バックグラウンドで走る関数
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サーバーなので、監視対象にできる
asyncの代わりにawaitを使う
タスク内の関数がクラッシュした場合、
start_linkを使ってプロセスを生成
=> すぐに終了asyncを使ってプロセスを生成
=>awaitが呼ばれたときに終了
- スーパーバイザからタスクを実行する