Controllers launch threads to execute their tasks. When the operator is shut down, we should be able to configure how these threaded tasks get resolved; in particular, how long, if at all, do we need to wait for these threads to finish executing their tasks before the operator is actually shut down.