public async Task <ActionResult> Index(CancellationToken ctk) { DateTime startDate = DateTime.UtcNow; HomePageViewModel viewModel = new HomePageViewModel(); viewModel.AddMessage(string.Concat("Starting Action on thread id ", Thread.CurrentThread.ManagedThreadId)); Task <string> calculationResultTask = CalculationService.GetResultAsync(ctk); Task <string> databaseResultTask = DatabaseService.GetDataAsync(ctk); await Task.WhenAll(calculationResultTask, databaseResultTask); viewModel.AddMessage(calculationResultTask.GetAwaiter().GetResult()); viewModel.AddMessage(databaseResultTask.GetAwaiter().GetResult()); DateTime endDate = DateTime.UtcNow; TimeSpan diff = endDate - startDate; viewModel.AddMessage(string.Concat("Finishing Action on thread id ", Thread.CurrentThread.ManagedThreadId)); viewModel.AddMessage(string.Concat("Action processing time: ", diff.TotalSeconds)); return(View(viewModel)); }