Delay in software timer task or the daemon task

from 《Mastering the FreeRTOS™Real Time Kernel.pdf》
“Software timer callback functions execute from start to finish, and exit in the normal way. They
should be kept short, and must not enter the Blocked state.
Note: As will be seen, software timer callback functions execute in the context of a task that is
created automatically when the FreeRTOS scheduler is started. Therefore, it is essential that
software timer callback functions never call FreeRTOS API functions that will result in the
calling task entering the Blocked state. It is ok to call functions such as xQueueReceive(), but
only if the function’s xTicksToWait parameter (which specifies the function’s block time) is set
to 0. It is not ok to call functions such as vTaskDelay(), as calling vTaskDelay() will always
place the calling task into the Blocked state. ”
this words says no delay allowed in daemon task.I need some work in daemon task for save RAM,and
these work may use like this:

vTaskSuspendAll();
/* do work */
xTaskResumeAll();

or like this:

if(xQueueRecieve(xQueueHandle, &msg, 15) == pdPASS)
{
    /*do work*/
}
else
{
    /* do process */
}

Are these opration banned by FreeRTOS or not recommend?

vTaskSuspendAll() will work inside a timer callback function, as that doesn’t cause the Timer task to ‘block’. As with all uses of vTaskSuspendAll(), it need to be done with care as turning off the scheduler can impact system performance and delay possibly critical responses.

The xQueueRexeive with a delay will often work in a timer callback function, but you need to remember that in doing so, you are blocking ALL timer callback functions, as no other callback will be checked to see if it will run until that callback returns. I seem to remember that there are (or at least were) some corner cases where this sort of action actually could cause a problem in the timer task and trigger an assert call.

Generally, my preference is for these sorts of things is to have the timer callback trigger a task, which can then do those slower operations without impacting other timer operations.