That's right, tgext.asyncjob starts the thread in daemon mode, so there is no guarantee that your thread will finish in a clear way.
Whenever the master process terminates, the thread does too.
That was the choice made as the worker is bound to the application process and I didn't want to have the application block waiting for the worker to complete during a restart as the use case for asyncjob was mostly related to transient/idempotent tasks like exporting a file to user.
I'll gladly review and merge any patch to add graceful shutdown of the worker. Just make sure it's optional for anyone willing to keep the current quick shutdown behaviour.