diff --git a/src/JsonRpc/IRequestRouter.cs b/src/JsonRpc/IRequestRouter.cs index 249032d03..2df2eb225 100644 --- a/src/JsonRpc/IRequestRouter.cs +++ b/src/JsonRpc/IRequestRouter.cs @@ -10,6 +10,7 @@ public interface IRequestRouter Task RouteNotification(Notification notification, CancellationToken token); Task RouteRequest(Request request, CancellationToken token); void CancelRequest(object id); + void StartRequest(object id); } public interface IRequestRouter : IRequestRouter diff --git a/src/JsonRpc/InputHandler.cs b/src/JsonRpc/InputHandler.cs index 51000ac2c..d969859ff 100644 --- a/src/JsonRpc/InputHandler.cs +++ b/src/JsonRpc/InputHandler.cs @@ -179,6 +179,7 @@ private void HandleRequest(string request) var descriptor = _requestRouter.GetDescriptor(item.Request); if (descriptor is null) continue; var type = _requestProcessIdentifier.Identify(descriptor); + _requestRouter.StartRequest(item.Request.Id); _scheduler.Add( type, item.Request.Method, diff --git a/src/JsonRpc/RequestRouterBase.cs b/src/JsonRpc/RequestRouterBase.cs index 1552e32bd..7e65f6cbe 100644 --- a/src/JsonRpc/RequestRouterBase.cs +++ b/src/JsonRpc/RequestRouterBase.cs @@ -185,20 +185,21 @@ public virtual async Task RouteRequest(TDescriptor descriptor, Re public void CancelRequest(object id) { - var idValue = GetId(id); - if (_requests.TryGetValue(idValue, out var cts)) + if (_requests.TryGetValue(GetId(id), out var cts)) { cts.Cancel(); } else { - cts = new CancellationTokenSource(); - _requests.TryAdd(idValue, cts); - cts.Cancel(); _logger.LogDebug("Request {Id} was not found to cancel, stubbing it in.", id); } } + public void StartRequest(object id) + { + _requests.TryAdd(GetId(id), new CancellationTokenSource()); + } + private string GetId(object id) { if (id is string s)