anchor.diff:  handle_info({'$gen_server2', job_result, Queue, Result}, State) ->
       {ok, Job} = take_active_job(Queue),
       erlang:demonitor(Job#async_job.mref, [flush]),
  +
  +    %% reuse the result for all following jobs with the same name on the same
  +    %% queue
  +    MoreJobs = dequeue_same_name_jobs(Job#async_job.name, Queue),
       maybe_start_job(Queue),
   
  -    (Job#async_job.handle_result)(Result, State);
  +    chain_handle_results([Job | MoreJobs], Result, State);
   handle_info({'DOWN', MRef, process, _Pid, _Reason} = Info, State) ->
       case get_active_job(#async_job.mref, MRef) of
           {ok, Job} ->
  
positive.code: -export([enter_loop/3, enter_loop/4, enter_loop/5]).
  
  %% gen_server2-specific APIs
  -export([async_job/2, async_job/3]).
  
  %% gen_server callbacks
  -export([init/1, handle_call/3, handle_cast/2, handle_info/2,
  
negative.code: %% gen_server2-specific APIs
  async_job(Body, HandleResult) ->
      Ref = make_ref(),
      async_job(Ref, Ref, Body, HandleResult).
  
  async_job(Queue, Body, HandleResult) ->
      async_job(Queue, make_ref(), Body, HandleResult).
  
  async_job(Queue, Name, Body, HandleResult) ->
      enqueue_job(Queue, Name, Body, HandleResult),
      maybe_start_job(Queue),
      Queue.
  
  