You should check the caret position after switching back to sync context: it is possible that caret was moved or user has edited the source text while you were on the thread pool. Also at glance explicit flipping of contexts between threadpool\main thread is not necessary. Effectively  `vsLanguageService.GetFSharpSymbol` will be served by the reactor thread and  after that async infrastructure will resume execution on the captured correct synchronization context.