Maintain request context in asynchronousInvoke

Summary: Listenes are fired on different thread for an async invoke. Save/load the thread local request context so the event handlers relying on it will work.
should we use try-finally here too in case the user's preReadException throws?