we are always in the main thread