public static IRequestProgressObservable <TItem, TResponse> RequestProgress <TResponse, TItem>( this ILanguageProtocolProxy requestRouter, IPartialItemRequest <TResponse, TItem> @params, Func <TItem, TResponse> factory, CancellationToken cancellationToken = default ) { var resultToken = new ProgressToken(Guid.NewGuid().ToString()); @params.PartialResultToken = resultToken; return(requestRouter.ProgressManager.MonitorUntil(@params, factory, cancellationToken)); }
public IProgressObserver <TItem> For <TResponse, TItem>(IPartialItemRequest <TResponse, TItem> request, CancellationToken cancellationToken) { if (request.PartialResultToken == null) { return(ProgressObserver <TItem> .Noop); } if (_activeObservers.TryGetValue(request.PartialResultToken, out var o) && o is IProgressObserver <TItem> observer) { return(observer); } observer = new ProgressObserver <TItem>(request.PartialResultToken, _router, _serializer, cancellationToken, () => _activeObservers.TryRemove(request.PartialResultToken, out var disposable)); _activeObservers.TryAdd(request.PartialResultToken, observer); return(observer); }
public IRequestProgressObservable <TItem, TResult> MonitorUntil <TItem, TResult>( IPartialItemRequest <TResult, TItem> request, Func <TItem, TResult, TResult> factory, CancellationToken cancellationToken ) { request.PartialResultToken ??= new ProgressToken(Guid.NewGuid().ToString()); if (_activeObservables.TryGetValue(request.PartialResultToken, out var o) && o is IRequestProgressObservable <TItem, TResult> observable) { return(observable); } observable = new RequestProgressObservable <TItem, TResult>( _serializer, request.PartialResultToken, MakeRequest(request), factory, cancellationToken, () => _activeObservables.TryRemove(request.PartialResultToken, out var disposable) ); _activeObservables.TryAdd(request.PartialResultToken, observable); return(observable); }
public IRequestProgressObservable <TItem, TResult> MonitorUntil <TItem, TResult>( IPartialItemRequest <TResult, TItem> request, Func <TItem, TResult> factory, CancellationToken cancellationToken ) { request.SetPartialResultToken(); if (_activeObservables.TryGetValue(request.PartialResultToken !, out var o) && o is IRequestProgressObservable <TItem, TResult> observable) { return(observable); } observable = new PartialItemRequestProgressObservable <TItem, TResult>( _serializer, request.PartialResultToken !, MakeRequest(request), (x, _) => factory(x), _ => default !,