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);
        }
Ejemplo n.º 4
0
        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 !,