Receive Task vs Message Intermediate Catching Event


I have a conceptual question regarding the “Receive Task” and “Message Intermediate Catch Event” . Though both can be used interchangeably to achieve the goal , but I am just wondering the best practises around it .
Can you please mention when one should use the first one and when to use the second one ?


Use the Receive Task because you can put boundary events on it.
e.g. a timer


Thanks for your prompt reply.