Difference between put() and put_response()

Hi
In this page of the Cookbook, the Driver is using put() method to send back the response to the sequence. What’s the difference between put() and put_response()? I understand that put() is a task and put_response() is a function, but what is the practical difference and how should we chose between them? Specifically, what difference would it make if we just used put_response() instead of put() in the Driver code given in the above link?
Thanks

In reply to Farhad:

Within the Base Class Library ,
task put( rsp_arg ) internally calls function put_response( rsp_arg )

So apart from them being a function and task there is No difference .

This has the restriction from where they can be called
i.e from another function / task

In reply to ABD_91:

Thanks for the reply, ABD_91
I understand now, the only thing that the put() task does is to call the function put_response. But your answer pulled my attention to the fact that in the above link, the call to put() task is made inside the end_transfer() function. Are we allowed to do that? I assume we are only allowed to call a task from a function if it is used inside a fork…join_none block, so I think here it would make more sense to use put_response() rather than put(). Am I correct?

In reply to Farhad:

From a strict LRM perspective it’ Illegal to call a task from a function
( w/o join_none ) .

However if the task has no delay OR blocking statements i.e it operates as function , I have observed Tools allow it with a Warning Message ( Tool Specific )