When to create a task?

No, that is polling, which you should not do. Blocking happens when a task operates on a FreeRTOS object that isn’t ready, and the scheduler “blocks” the task (just like it did a delay) for the amount of time specified, or until the object becomes ready, which ever comes firsts. Tasks that are blocked use to CPU time.

Ideally, tasks should NEVER “loop waiting for data” as that is just wasting resources, but the I/O device supplying data should generate an interrupt, and the ISR can then somehow notify the waiting task. For serial ports, I have the ISR gather the data. Generic interface puts it into a queue. A higher speed interface may fill a buffer and signal the task when the end of message arrives to save activations after each character.