public Task <ViewResult> Index2()
        {
            var tcs = new TaskCompletionSource <ViewResult>();

            var client = new ServiceDecorator(new NewsServiceClient());

            var timer = new Stopwatch();

            timer.Start();

            var worldNews = client.GetWorldNewsTaskAsync();
            var sportNews = client.GetSportNewsTaskAsync();
            var funNews   = client.GetFunNewsTaskAsync();

            var allNews = Task.WhenAll(worldNews, sportNews, funNews);

            allNews.ContinueWith(r =>
            {
                IEnumerable <NewsModel> result = new List <NewsModel>();
                result = r.Result.Aggregate(result,
                                            (current, news) => current.Concat(news.Convert()));
                var model = new ViewModel {
                    News = result, Elapsed = timer.Elapsed
                };
                tcs.SetResult(View("Index", model));
                timer.Stop();
            });

            return(tcs.Task);
        }
        public Task<ViewResult> Index2()
        {
            var tcs = new TaskCompletionSource<ViewResult>();

            var client = new ServiceDecorator(new NewsServiceClient());

            var timer = new Stopwatch();
            timer.Start();

            var worldNews = client.GetWorldNewsTaskAsync();
            var sportNews = client.GetSportNewsTaskAsync();
            var funNews = client.GetFunNewsTaskAsync();

            var allNews = Task.WhenAll(worldNews, sportNews, funNews);

            allNews.ContinueWith(r =>
            {
                IEnumerable<NewsModel> result = new List<NewsModel>();
                result = r.Result.Aggregate(result,
                    (current, news) => current.Concat(news.Convert()));
                var model = new ViewModel { News = result, Elapsed = timer.Elapsed };
                tcs.SetResult(View("Index", model));
                timer.Stop();
            });

            return tcs.Task;
        }
        public Task<ViewResult> Index3()
        {
            var service = new NewsServiceClient();
            var client = new ServiceDecorator(service);

            var timer = new Stopwatch();
            timer.Start();

            return
                from w in client.GetWorldNewsTaskAsync()
                from s in client.GetSportNewsTaskAsync()
                from f in client.GetFunNewsTaskAsync()
                let all = w.Union(s).Union(f).Convert()
                select View("Index",
                    new ViewModel { News = f.Convert(), Elapsed = timer.Elapsed });
        }
        public Task <ViewResult> Index3()
        {
            var service = new NewsServiceClient();
            var client  = new ServiceDecorator(service);

            var timer = new Stopwatch();

            timer.Start();

            return
                (from w in client.GetWorldNewsTaskAsync()
                 from s in client.GetSportNewsTaskAsync()
                 from f in client.GetFunNewsTaskAsync()
                 let all = w.Union(s).Union(f).Convert()
                           select View("Index",
                                       new ViewModel { News = f.Convert(), Elapsed = timer.Elapsed }));
        }