In reply to caowangyang:
WangYang,
The ref argument does not provide delay, it allows the tasks to consume time and keep the argument values in sync. A better example is passing a clock to a task
task t(ref bit clk);
repeat (10) @(posdege clk) $display("tick-tock");
endtask
Had you passed clk as an input argument, the task would hang as it would never see a change.
If you have a task with no blocking statements, or a function, there really is no point in having ref arguments except as an optimization to prevent the copying of large arrays (which many tools do as an optimization implicitly for you anyways)