我又挖了一些,找到了我自己问题的答案。
在消息处理程序“结果”中有一个可选的第四个参数,您可以使用它是超时。
所以:
some_fsm_state({set, Val}, State) ->
NewState = do(Val, State),
{next_state, another_fsm_state, NewState, 5000};
another_fsm_state(timeout, State) ->
handle_timeout(State).
another_fsm_state({set, Val}, State) ->
%% more code that handles this state.
一旦调用了 some_fsm_state,它就会转换到“another_fsm_state”的下一个状态,超时时间为 5000 毫秒。如果在 5000ms 内没有收到新消息,则调用 another_fsm_state(timeout, State)。
聪明的 OTP 程序员。:)
应该注意的是,结果元组中的第四个元素可以是休眠的。请参阅 Erlang 文档了解更多信息。
Erlang - 休眠
gen_fsm 文档