How to generate multiple resets in virtual sequence during simulation

I have a specific requirement in the below code.

task normal_seq::body();
begin
  reset_seq.start(null,this); // reset sequence
  begin
    normal_seq1.start(null,this); // sequences following reset sequence. 
    normal_seq2.start(null,this);
    normal_seq3.start(null,this);
    normal_seq4.start(null,this);
    normal_seq5.start(null,this);
  end
end
endtask

I wanted to have multiple resets during simulation with random delays. and if reset is detected, then normal_seq1 should start executing after each reset.

task normal_seq::body();
fork
  repeat(5) begin
  #($urandom_range(25,20)) 
  reset_seq.start(null,this); // reset sequence
  end
  begin
    normal_seq1.start(null,this); // sequences following reset sequence. 
    normal_seq2.start(null,this);
    normal_seq3.start(null,this);
    normal_seq4.start(null,this);
    normal_seq5.start(null,this);
  end
join
endtask

Problem is i am not finding a way to return my normal sequence flow to normal_seq1 each time reset is detected. Could you please suggest a way to do it.

Thanks

In reply to 8Blades:

As per my understanding, you are wanting to generate reset randomly within you simulation and you wanted to start your normal_seqeunces from #1 to #5.

For this requirement


task normal_seq::body();

repeat(5) begin
  fork
    begin
      reset_seq.start(null,this); // reset sequence
      #($urandom_range(25,20)) 
    end
    begin
      normal_seq1.start(null,this); // sequences following reset sequence. 
      normal_seq2.start(null,this);
      normal_seq3.start(null,this);
      normal_seq4.start(null,this);
      normal_seq5.start(null,this);
    end
  join_any
  disable fork;
end
endtask

From body task, you can do above thing, But this is not recommended, you should have implement your driver which can release your transaction (item_done) whenever it detects reset from interface.