【发布时间】:2012-02-11 08:16:51
【问题描述】:
早安,
我有一个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}
【问题讨论】:
标签: erlang erlang-otp gen-server