diff --git a/src/Features/LanguageServer/Protocol/AbstractRequestHandlerProvider.cs b/src/Features/LanguageServer/Protocol/AbstractRequestHandlerProvider.cs index d89383fca88bb247234a9547ff177ea9b797f1cc..b194301a98ef583d1ab45adb9b7d9aec3b760f35 100644 --- a/src/Features/LanguageServer/Protocol/AbstractRequestHandlerProvider.cs +++ b/src/Features/LanguageServer/Protocol/AbstractRequestHandlerProvider.cs @@ -20,6 +20,8 @@ internal abstract class AbstractRequestHandlerProvider { private readonly ImmutableDictionary> _requestHandlers; + private readonly RequestExecutionQueue _queue = new RequestExecutionQueue(); + public AbstractRequestHandlerProvider(IEnumerable> requestHandlers, string? languageName = null) => _requestHandlers = CreateMethodToHandlerMap(requestHandlers.Where(rh => rh.Metadata.LanguageName == languageName)); @@ -43,11 +45,7 @@ public AbstractRequestHandlerProvider(IEnumerable?)_requestHandlers[methodName]?.Value; Contract.ThrowIfNull(handler, string.Format("Request handler not found for method {0}", methodName)); - var context = CreateContext(clientCapabilities, clientName); - return handler.HandleRequestAsync(request, context, cancellationToken); + return _queue.ExecuteAsync(false, handler, request, clientCapabilities, clientName, cancellationToken); } - - private static RequestContext CreateContext(LSP.ClientCapabilities clientCapabilities, string? clientName) - => new RequestContext(clientCapabilities, clientName); } }