예제 #1
0
        public async Task <ActionResult> RequestImages(GetImagesViewModel model)
        {
            try
            {
                IEndpoint endpoint = _bus.GetEndpoint(_settings.ImageTrackingServiceAddress);

                var results = new ConcurrentBag <Uri>();

                IEnumerable <Task> requests = model
                                              .SourceAddress
                                              .Where(x => !string.IsNullOrEmpty(x) && Uri.IsWellFormedUriString(x, UriKind.RelativeOrAbsolute))
                                              .Select(address =>
                {
                    return(endpoint.SendRequestAsync(_bus,
                                                     new RequestImageCommand(new Uri(address)), x =>
                    {
                        x.Handle <ImageRequestCompleted>(msg => results.Add(msg.LocalAddress));
                        x.Handle <ImageRequestFaulted>(msg => { });
                        x.HandleTimeout(30.Seconds(), () => { });
                    }).Task);
                });

                return(await Task.WhenAll(requests)
                       .ContinueWith(tasks => { return PartialView("ImageResults", new ImageResultsViewModel(results)); }));
            }
            catch
            {
                return(View());
            }
        }
예제 #2
0
        public async Task<ActionResult> RequestImages(GetImagesViewModel model)
        {
            try
            {
                IEndpoint endpoint = _bus.GetEndpoint(_settings.ImageTrackingServiceAddress);

                var results = new ConcurrentBag<Uri>();

                IEnumerable<Task> requests = model
                    .SourceAddress
                    .Where(x => !string.IsNullOrEmpty(x) && Uri.IsWellFormedUriString(x, UriKind.RelativeOrAbsolute))
                    .Select(address =>
                        {
                            return endpoint.SendRequestAsync(_bus,
                                new RequestImageCommand(new Uri(address)), x =>
                                    {
                                        x.Handle<ImageRequestCompleted>(msg => results.Add(msg.LocalAddress));
                                        x.Handle<ImageRequestFaulted>(msg => { });
                                        x.HandleTimeout(30.Seconds(), () => { });
                                    }).Task;
                        });

                return await Task.WhenAll(requests)
                                 .ContinueWith(tasks => { return PartialView("ImageResults",new ImageResultsViewModel(results)); });
            }
            catch
            {
                return View();
            }
        }