ну, правильно все. Необязательно правда выходную очередь чистить, потому как она отдельно от задачи живет, ну да ладно. state machine можно передать как аргумент функции новой задачи - задача запускается смотрит параметр так как он формализован на этапе компиляции и делает чего ей нужно...
Что в этом искуственного?