There is a VERY good book on FreeRTOS available here:
http://www.freertos.org/Documentation/1 ... _Guide.pdf
If we look on page 46 (at the time of writing) we find the following:
Each task is a small program in its own right. It has an entry point, will normally run forever within an infinite loop, and will not exit.
When I read this, I was surprised. To me a task/thread is started up to handle asynchronous work, does it work in parallel and then ends when it has no more work to do. The alternative is that we start tasks with the thinking that they will "eventually" do work and then they are blocked waiting for a signal from another task.
It has been my experience that creating a task, doing some work and then ending the task "works" just fine. So what we have to do is do some thinking into the implications of starting tasks and why a new task per "work item" is either bad or good.
If we start a task per work item, let it handle that work item and then end, I am going to claim that is more "intuitive". It also allows us to process "n" work items in parallel where "n" can be variable. The down side is that there is wasted CPU overhead in starting a task, letting it do its house keeping and then ending. If we pre-create tasks and let them exist forever then I presume the event that causes it to wake up is much cheaper than creating a task by itself. However, there is a non trivial memory cost in having a task "exist" and not doing any work.
Another factor is timing ... since the creation of a task costs CPU cycles that equates to elapsed time where the CPU is not running you code. If we are processing some electronic signals that need attended to in real-time, we would want to minimize the latency ... and again, pre-creating tasks would be the solution. However there are also classes of problem where a few milliseconds to create a task is nothing ... for example when handling an incoming network request for low volume traffic.
To me I would files these considerations in the back of my mind and then look on a case by case basis.