Instead of creating the thread directly in the constructor, the thread
is now created when the context is refreshed and stopped when the
context is closed.
As AOT processing never refreshes the context, the thread is never
started and can't block the AOT processing task.
Closes gh-38531