Thanks for answering. This is an extremely interesting post. I have a question for this: If we call the method f.e. ChatShared.Init without CallSubDelayed but directly from a background Worker thread, since ChatShared is a shared module, where does the code of "Init sub" run? In the main thread or in the worker thread?
When you directly call a method, it always run on the same thread. It is only when you call it with CallSubDelayed that the call can be transferred to a different thread.
If all class instances are created from the worker class instance then they will be "owned" by the worker thread.
Note that you can always verify it by logging the value of Main.srvr.CurrentThreadIndex.
And make sure to test it in release mode as in debug mode everything runs on the main thread.