Use GCD to dispatch to main thread, ensuring order is preserved