22using System . Collections . Generic ;
33using System . Diagnostics . CodeAnalysis ;
44using System . Linq ;
5+ using System . Reactive . Concurrency ;
56using System . Reactive . Disposables ;
67using System . Reactive . Linq ;
78using System . Reactive . Subjects ;
@@ -48,6 +49,7 @@ public class LanguageClient : JsonRpcServerBase, ILanguageClient
4849 private readonly IEnumerable < IOnLanguageClientInitialized > _initializedHandlers ;
4950 private readonly LspSerializer _serializer ;
5051 private readonly InstanceHasStarted _instanceHasStarted ;
52+ private readonly IScheduler _scheduler ;
5153 private readonly IResponseRouter _responseRouter ;
5254 private readonly ISubject < InitializeResult > _initializeComplete = new AsyncSubject < InitializeResult > ( ) ;
5355 private readonly CompositeDisposable _disposable = new CompositeDisposable ( ) ;
@@ -150,7 +152,8 @@ internal LanguageClient(
150152 IEnumerable < OnLanguageClientInitializedDelegate > initializedDelegates ,
151153 IEnumerable < IOnLanguageClientInitialized > initializedHandlers ,
152154 LspSerializer serializer ,
153- InstanceHasStarted instanceHasStarted
155+ InstanceHasStarted instanceHasStarted ,
156+ IScheduler scheduler
154157 ) : base ( handlerCollection , responseRouter )
155158 {
156159 _connection = connection ;
@@ -179,6 +182,7 @@ InstanceHasStarted instanceHasStarted
179182 _initializedHandlers = initializedHandlers ;
180183 _serializer = serializer ;
181184 _instanceHasStarted = instanceHasStarted ;
185+ _scheduler = scheduler ;
182186 _concurrency = options . Value . Concurrency ;
183187
184188 // We need to at least create Window here in case any handler does loggin in their constructor
@@ -262,6 +266,7 @@ await LanguageProtocolEventingHelper.Run(
262266 _initializeHandlers . Union ( _collection . Select ( z => z . Handler ) . OfType < IOnLanguageClientInitialize > ( ) ) ,
263267 ( handler , ct ) => handler . OnInitialize ( this , @params , ct ) ,
264268 _concurrency ,
269+ _scheduler ,
265270 token
266271 ) . ConfigureAwait ( false ) ;
267272
@@ -281,6 +286,7 @@ await LanguageProtocolEventingHelper.Run(
281286 _initializedHandlers . Union ( _collection . Select ( z => z . Handler ) . OfType < IOnLanguageClientInitialized > ( ) ) ,
282287 ( handler , ct ) => handler . OnInitialized ( this , @params , serverParams , ct ) ,
283288 _concurrency ,
289+ _scheduler ,
284290 token
285291 ) . ConfigureAwait ( false ) ;
286292
@@ -299,6 +305,7 @@ await LanguageProtocolEventingHelper.Run(
299305 _startedHandlers . Union ( _collection . Select ( z => z . Handler ) . OfType < IOnLanguageClientStarted > ( ) ) ,
300306 ( handler , ct ) => handler . OnStarted ( this , ct ) ,
301307 _concurrency ,
308+ _scheduler ,
302309 token
303310 ) . ConfigureAwait ( false ) ;
304311
@@ -395,7 +402,7 @@ private Supports<T> UseOrTryAndFindCapability<T>(Supports<T> supports) where T :
395402 bool IResponseRouter . TryGetRequest ( long id , [ NotNullWhen ( true ) ] out string method , [ NotNullWhen ( true ) ] out TaskCompletionSource < JToken > pendingTask ) =>
396403 _responseRouter . TryGetRequest ( id , out method , out pendingTask ) ;
397404
398- public Task < InitializeResult > WasStarted => _initializeComplete . ToTask ( ) ;
405+ public Task < InitializeResult > WasStarted => _initializeComplete . ToTask ( _scheduler ) ;
399406
400407 public void Dispose ( )
401408 {
0 commit comments