public static TResult ObserveWorkDone <T, TResult>( this IWorkspaceLanguageClient proxy, T @params, Func <IWorkspaceLanguageClient, T, TResult> func, IWorkDoneProgressObserver observer ) where T : IWorkDoneProgressParams { DoObserveWorkDone(proxy, @params, observer); return(func(proxy, @params)); }
private static void DoObserveWorkDone(ILanguageProtocolProxy proxy, IWorkDoneProgressParams @params, IWorkDoneProgressObserver observer) { var token = @params.WorkDoneToken ??= new ProgressToken(Guid.NewGuid().ToString()); var observable = proxy.GetRequiredService <IClientWorkDoneManager>().Monitor(token); observable.Subscribe( v => { switch (v) { case WorkDoneProgressBegin begin: observer.OnBegin(begin); break; case WorkDoneProgressReport report: observer.OnReport(report); break; case WorkDoneProgressEnd end: observer.OnEnd(end); break; } }, observer.OnError, observer.OnCompleted ); }