Your
Kick off a task
Keep doing stuff
model of program structure is supported by many programming languages. For example in Java one can have
Runnable myRunnable = new MyRunnable();
new Thread(myRunnable).start();
doSomeMore();
However this can get a bit messy. You're firing off threads, which presumably may run for an indefinite period of time, so your "main line" may reach its end while the threads are all off doing work. You've got no "supervisory" thread to keep track of that work. Worse, you might end up firing off an excessive number of threads and eat up all processing power.
Hence it's quite common to do all the processing in different threads, an event driven style of programming. So you have a thread listening for events such as worker threads completing and deciding which new workers to create and so on. Or maybe a thread listening for new requests (eg. user's clicking something, or files being created or messages arriving) and deciding whether and when to kick off workers.
In general modern UIs are almost entirely event driven, most of the code is in event handlers (do this when the user clicks that), you don't yourself write a main, the UI framework is in control and calls your code.
I think you'd find it helpful to study a tutorial about event driven programming.