anchor.diff:  handle_continue(maybe_run_fn, State) ->
       NewState = maybe_run_fn(State),
       {noreply, NewState, timeout(NewState)}.
  +
  +format_status(_Opt, [_PDict, State]) ->
  +    ScheduleLen=length(State#state.schedule),
  +    ScheduleRevLen=length(State#state.schedule_reversed),
  +    State1=setelement(#state.schedule,State,ScheduleLen),
  +    setelement(#state.schedule_reversed,State1,ScheduleRevLen).
   %%------------------------------------------------------------------------------
   %% internal functions
   %%------------------------------------------------------------------------------
  
positive.code:          handle_call/3,
           handle_info/2,
           handle_cast/2,
           handle_continue/2]).
  
  -define(DEFAULT_MSG_TIMEOUT, 60000).%% one minute
  
  
negative.code:     NewSchedule = lists:reverse(SchRev),
      NewState = State#state{schedule = NewSchedule, schedule_reversed = []},
      maybe_run_fn(NewState);
  maybe_run_fn(#state{interval = 0, pause = false, n = N} = State) when N > 0 ->
      NewState = run_fn(State),
      maybe_run_fn(NewState);
  maybe_run_fn(#state{can_run_fn = true, pause = false, n = N} = State) when N > 0 ->
      NewState = run_fn(State),
      NewState#state{can_run_fn = false};
  maybe_run_fn(State) ->
      State.
  
  run_fn(#state{schedule = [RunnerPid | T], name = Name, n = N} = State) ->
      erlang:monitor(process, RunnerPid),
      RunnerPid ! scheduled,
      amoc_throttle_controller:update_metric(Name, execution),
      State#state{schedule = T, n = N - 1}.
  
  async_runner(Fun) ->
      receive
  