良い一日、
私gen_server
はいくつかの長期的な状態更新タスクを定期的に実行するプロセス
を持っていますhandle_info
:
handle_info(trigger, State) ->
NewState = some_long_running_task(),
erlang:send_after(?LOOP_TIME, self(), trigger),
{noreply, NewState}.
しかし、そのようなタスクが実行されると、サーバー全体が応答しなくなり、それを呼び出すとサーバー全体がクラッシュします。
my_gen_server:status().
** exception exit: {timeout,{gen_server,call,[my_gen_server,status]}}
in function gen_server:call/2
gen_serverのブロックを回避するにはどうすればよいですか?そして、いつでも1回呼び出すとmy_gen_server:status()
、結果は次のようになります。
{ok, task_active}