再会,
我有一个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 ?当一个电话my_gen_server:status()
在任何时候,结果应该是这样的:
{ok, task_active}