S> Собственно вопрос, насколько всё это красиво и правильно? Изначально хотел сделать TaskState наследником Task чтобы упростить доступ из TaskState к параметрам в Task, потом передумал, решив что это сущности разной природы. Стоило ли здесь использовать наследование и можно ли эту систему написать более изящно?
Насчет как это вообще может быть сделано, посмотри Intel TBB. Не то что бы вариант, который там идеален(это далеко не так, там местами очень сильно пожертвовали понятностью), но в качестве информации к размышлению подойдет.