/// <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))
                {
                    using (var evt = new RequestStartEvent(requester, request))
                    {
                        if (events != null)
                            events.Publish(evt);

                        return await requester.RequestAsync(request, cancel).ConfigureAwait(false);
                    }
                }
            }

            return default(IResponse);
        }
Beispiel #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);
        }