Skip to content

Instantly share code, notes, and snippets.

@LazyTarget
Last active August 16, 2017 11:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save LazyTarget/4fd23ba2d749cd6572a9e01fb3f8a181 to your computer and use it in GitHub Desktop.
Save LazyTarget/4fd23ba2d749cd6572a9e01fb3f8a181 to your computer and use it in GitHub Desktop.
SessionDataService - 2. parallel
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