public void Run() { List <ReportViewModel> cr; Task <List <Customer> > c1; var flag = 1; try { c1 = _customerReportServiceInterface.GetAllCustomersAsync(); Console.WriteLine("Customers..."); c1.Result.ForEach(c => { Console.WriteLine(c.Name); }); cr = _customerReportServiceInterface.GetAllCustomerReportsAsync().Result; Console.WriteLine(Constants.CustomerReports); foreach (var model in cr) { Console.WriteLine("Customer: {1}, Report Data: {0}", model.ReportData, model.Customer.Name); } #region Emulate processing var reportFromClientCopy = new ReportViewModel[cr.Count]; cr.CopyTo(reportFromClientCopy); var reportFromClient = reportFromClientCopy.ToList(); reportFromClient.ForEach(report => { if (report.Id == 1) { report.ReportData = "New report data"; } }); #endregion Emulate processing Console.WriteLine("Result: {0}", _customerReportServiceInterface.UpdateReportDataAsync(new List <ReportViewModel>()).Result); Console.WriteLine("Result: {0}", _customerReportServiceInterface.UpdateReportDataAsync(reportFromClient).Result); Console.WriteLine("Customer Reports"); cr = _customerReportServiceInterface.GetAllCustomerReportsAsync().Result; foreach (var model in cr) { Console.WriteLine("Customer: {1}, Report Data: {0}", model.ReportData, model.Customer.Name); } Console.WriteLine("Specific reports..."); Console.WriteLine("Specific report 1"); var specificReport = _customerReportServiceInterface.GetReportByCust_Id(1); Console.WriteLine("Customer: {1}, Report Data: {0}", specificReport.Result.ReportData, specificReport.Result.Customer.Name); Console.WriteLine("Specific report 2"); var specificReport2 = _customerReportServiceInterface.GetReportByCust_Id(2); Console.WriteLine("Customer: {1}, Report Data: {0}", specificReport2.Result.ReportData, specificReport2.Result.Customer.Name); if (HasReportChanged(specificReport.Result, false) > 0) { Console.WriteLine("Report for {0} has been changed", specificReport.Result.Customer.Name); } else if (HasReportChanged(specificReport.Result, false) == 0) { Console.WriteLine("Report for {0} has not been changed", specificReport.Result.Customer.Name); } else { Console.WriteLine("{1} Report for {0} was skipped", specificReport.Result.Customer.Name, "Checking"); } if (HasReportChanged(specificReport2.Result, false) > 0) { Console.WriteLine("Report for {0} has been changed", specificReport2.Result.Customer.Name); } else if (HasReportChanged(specificReport2.Result, false) == 0) { Console.WriteLine("Report for {0} has not been changed", specificReport2.Result.Customer.Name); } else { Console.WriteLine("{1} Report for {0} was skipped", specificReport2.Result.Customer.Name, "Checking"); } var someNewReport3 = new ReportViewModel { Customer = new CustomerViewModel { Name = "Some fake customer" } }; if (HasReportChanged(someNewReport3, true) > 0) { Console.WriteLine("Report for {0} has been changed", someNewReport3.Customer.Name); } else if (HasReportChanged(specificReport2.Result, true) == 0) { Console.WriteLine("Report for {0} has not been changed", someNewReport3.Customer.Name); } else { Console.WriteLine("{1} Report for {0} was skipped", someNewReport3.Customer.Name, "Checking"); } flag = -1; } catch (Exception e) { flag = 0; Console.WriteLine("Smth has happened: {0}", e.Message); } finally { Console.WriteLine(Constants.Done); } if (flag < 0) { Console.WriteLine("processing finished without excetions"); } else if (flag == 0) { Console.WriteLine("processing finished with exceptions"); } else { Console.WriteLine("some other unpredictable result"); } _customerDao._customer1.CreatedUtc = null; _customerDao._customer1.Name = "Some fake customer 1"; c1 = _customerDao.GetAllCustomers(); Console.WriteLine("Customers..."); c1.Result.ForEach(c => { c.CreatedUtc = DateTime.Now; Console.WriteLine("Name: {0}, Date of creation:{1:U}", c.Name, c.CreatedUtc); }); Console.WriteLine("Finished"); Console.Read(); }