Fork-join construct is used in the function of member class in OVM

Once the door was opened up for fork/join_none, other restrictions in functions start to become meaningless, like clocking block drives, non-blocking assignments, event triggers. A restriction remains that you can’t fork a process unless the parent process is a process created by an initial or always block. That means it illegal to have a static variable initialization function call fork/join_none.
Dave

Can I used the delays in the functions something like:
#20 clk1 = 1’b1;
or
@(posedge clk1);

What are the advantages of allowing these constructs in functions, instead of using the task for achieving this functionality?