diff --git a/src/Workspaces/Remote/Core/ServiceDescriptor.cs b/src/Workspaces/Remote/Core/ServiceDescriptor.cs index affc89e71f9f6..19bcfde6763a8 100644 --- a/src/Workspaces/Remote/Core/ServiceDescriptor.cs +++ b/src/Workspaces/Remote/Core/ServiceDescriptor.cs @@ -75,6 +75,10 @@ protected override IJsonRpcMessageFormatter CreateFormatter() protected override JsonRpcConnection CreateConnection(JsonRpc jsonRpc) { + // The default synchronization context set by the base type is NonConcurrentSynchronizationContext, which means that all incoming calls + // would be processed sequentially, at least up until their first await. We generally don't have services that expect ordering in that specific way, so + // disable that, especially since we want CPU-bound operations to happen in parallel. + jsonRpc.SynchronizationContext = null; jsonRpc.CancelLocallyInvokedMethodsWhenConnectionIsClosed = true; var connection = base.CreateConnection(jsonRpc); connection.LocalRpcTargetOptions = s_jsonRpcTargetOptions;