public Task <ActionResult> BestProductsManualAsync()
        {
            var taskCompletionSource = new TaskCompletionSource <ActionResult>();

            var context = new AdventureContext();

            context.Products.Take(5).ToListAsync()
            .ContinueWith(productListTask =>
            {
                context.Products.CountAsync()
                .ContinueWith(productsCountTask =>
                {
                    context.Dispose();
                    taskCompletionSource.SetResult(
                        View("BestProducts", new BestProductsViewModel
                    {
                        Products           = productListTask.Result,
                        TotalProductsCount = productsCountTask.Result
                    }));
                });
            });

            return(taskCompletionSource.Task);
        }