提交 2336046f 编写于 作者: D David Wengier

Move context creation into execution queue

上级 563aa150
......@@ -20,6 +20,8 @@ internal abstract class AbstractRequestHandlerProvider
{
private readonly ImmutableDictionary<string, Lazy<IRequestHandler, IRequestHandlerMetadata>> _requestHandlers;
private readonly RequestExecutionQueue _queue = new RequestExecutionQueue();
public AbstractRequestHandlerProvider(IEnumerable<Lazy<IRequestHandler, IRequestHandlerMetadata>> requestHandlers, string? languageName = null)
=> _requestHandlers = CreateMethodToHandlerMap(requestHandlers.Where(rh => rh.Metadata.LanguageName == languageName));
......@@ -43,11 +45,7 @@ public AbstractRequestHandlerProvider(IEnumerable<Lazy<IRequestHandler, IRequest
var handler = (IRequestHandler<RequestType, ResponseType>?)_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);
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册