Difference between wait fork vs fork..join

Thanks mperyer.
I have a follow-up question regarding using fork/join on UVM seqs. Assume I have a scenario like : I have two virtual sequences which are extended from uvm_sequence and each one calls two sub seqs like

virtual_seq_A;

task body
fork
seq1.start(…);
seq2.start(…);
join
endtask
end virtual_seq_A

virtual_seq_B;

task body
fork
seq3.start(…);
seq4.start(…);
join
endtask
end virtual_seq_B

in my test or env, I want to run two virtual seqs in parallel :

class test extends uvm_tests;

task run_phase(…);
fork
virtual_seq_A.start(…);
virtual_seq_B.start(…);
wait fork;
join
endtask
endclass

my questions are :

  1. Do I need a wait fork here ?
  2. if i wan to excute the main process after all threads ( vir_seqA, vir_seqB, seq1…4)complete. how can i achieve it?
    thanks in advance