It might be great if we can post the pointer of the task. We can easily make a chain of task using the variable which holds the pointer to the next task.
task void (*m_next_task)(); event void handler() { if (m_next_task != NULL) post m_next_task; }