/// <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)); }
/// <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)); }