No, appswitch needs to be used on the main thread because it uses resources that are claimed by and are only usable by the main thread. But you say 'hanging my application', I would expect it to crash.
You could create an e32.aocallable so you can initiate the call from the second thread, whilst the call is actually executed on the main thread.
More detailed explanation of the root cause: the appswitch module uses the following code:
Code:
TApaTaskList taskList(CEikonEnv::Static()->WsSession());
The CEikonEnv::Static() call uses TLS (Thread Local Storage) to find the static reference to the CEikonEnv, which is initialized for the main thread only. On other threads this should PANIC.