Last active
August 16, 2017 11:04
-
-
Save LazyTarget/4fd23ba2d749cd6572a9e01fb3f8a181 to your computer and use it in GitHub Desktop.
SessionDataService - 2. parallel
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public SessionData GetSessionData(SessionRequest request) | |
{ | |
var response = new SessionData(); | |
var frameAgreement = _thirdPartyWs.GetFrameAgreementDetail(request.FrameAgreementId); | |
var agreements = frameAgreement.Agreements; | |
Parallel.ForEach(agreements, (agreement) => | |
{ | |
var agreementDto = new AgreementDto(); | |
response.Agreements.Add(agreementDto); | |
// data is gathered from thirdPartyWs and then combined into a custom `agreementDto` | |
var agreementDetail = _thirdPartyWs.GetAgreementDetail(agreement.Id); | |
var fuelCards = _thirdPartyWs.GetFuelCards(agreement.Id); | |
var serviceLevels = _thirdPartyWs.GetServiceLevels(agreement.Id); | |
var customers = _thirdPartyWs.GetCustomers(agreement.Id) | |
var mutex = new object(); | |
Parallel.ForEach(customers, (customer) => | |
{ | |
CustomerDto customerDto; | |
lock (mutex) | |
{ | |
customerDto = response.Customers.FirstOrDefault(c => c.Id == customer.Id); | |
if (customerDto == null) | |
{ | |
customerDto = new CustomerDto(); | |
response.Customers.Add(customerDto); | |
} | |
agreementDto.Customers.Add(customerDto); | |
} | |
var address = _thirdPartyWs.GetAddressByCustomer(customer.Id); | |
var branches = _thirdPartyWs.GetBranches(customer.Id); | |
// and even more thirdparty calls... | |
// data is combined into a custom `customerDto` | |
}); | |
}); | |
var person = _thirdPartyWs.GetPerson(request.UserId); | |
var accounts = _thirdPartyWs.GetAccount(person.Id); | |
Parallel.ForEach(accounts, (account) => | |
{ | |
var accountDetail = _thirdPartyWs.GetAccountDetail(account.Id); | |
foreach (var vehicle in accountDetail.Vehicles) | |
{ | |
var milageReport = _thirdPartyWs.GetCurrentMilageReport(vehicle.Id); | |
// data is combined into a custom `vehicleDto` | |
var vehicleDto = new VehicleDto(); | |
response.Person.Vehicles.Add(vehicleDto); | |
} | |
}); | |
return response; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment