Example #1
0
        /// <summary>
        /// Loads the given URI by using an asynchronous request.
        /// </summary>
        /// <param name="requesters">The requesters to try.</param>
        /// <param name="request">The data of the request to send.</param>
        /// <param name="events">The event aggregator.</param>
        /// <param name="cancel">
        /// The token which can be used to cancel the request.
        /// </param>
        /// <returns>
        /// The task which will eventually return the response.
        /// </returns>
        public static async Task <IResponse> LoadAsync(this IEnumerable <IRequester> requesters, IRequest request, IEventAggregator events, CancellationToken cancel)
        {
            foreach (var requester in requesters)
            {
                if (requester.SupportsProtocol(request.Address.Scheme))
                {
                    var evt = new RequestStartEvent(requester, request);

                    if (events != null)
                    {
                        events.Publish(evt);
                    }

                    var result = await requester.RequestAsync(request, cancel).ConfigureAwait(false);

                    evt.FireEnd();
                    return(result);
                }
            }

            return(default(IResponse));
        }
Example #2
0
        /// <summary>
        /// Loads the given URI by using an asynchronous request.
        /// </summary>
        /// <param name="request">The data of the request to send.</param>
        /// <param name="cancel">The cancellation token to use..</param>
        /// <returns>
        /// The task which will eventually return the response.
        /// </returns>
        protected async Task <IResponse> LoadAsync(Request request, CancellationToken cancel)
        {
            foreach (var requester in _requesters)
            {
                if (requester.SupportsProtocol(request.Address.Scheme))
                {
                    var events = _configuration.Events;
                    var evt    = new RequestStartEvent(requester, request);

                    if (events != null)
                    {
                        events.Publish(evt);
                    }

                    var result = await requester.RequestAsync(request, cancel).ConfigureAwait(false);

                    evt.FireEnd();
                    return(result);
                }
            }

            return(default(IResponse));
        }