Мы в настоящее время реорганизуем разделы нашего проекта, чтобы асинхронно вверх и вниз, yay!
Из-за нашего различного понимания, я и его коллега (позвольте назвать его Джим), имеют разные мнения о том, как будет выполняться наш код async/await и какой способ его написать.
Вот пример метода Джим писал:
public async Task<HouseModel> GetHouseModel(Guid houseId)
{
House house = await _houseService.GetHouse(houseId);
Task<IEnumerable<Furniture>> furniture = _furnitureService.GetFurnitureForHouse(house);
Task<IEnumerable<Appliances>> appliances = _applianceService.GetAppliancesForHouse(house);
return _houseModelFactory.MakeHouseModel(await furniture, await appliances);
}
И пример того, как я буду писать:
public async Task<HouseModel> GetHouseModel(Guid houseId)
{
House house = await _houseService.GetHouse(houseId);
IEnumerable<Furniture> furniture = await _furnitureService.GetFurnitureForHouse(house);
IEnumerable<Appliances> appliances = await _applianceService.GetAppliancesForHouse(house);
return _houseModelFactory.MakeHouseModel(furniture, appliances);
}
Я понимаю: потому что методы как в furniture
и в appliance
описанном выше, требуют House
, они будут ждать, пока House
будет доступен, прежде чем продолжить. Затем оба метода, которые нуждаются в " House
будут выполняться, но второй метод (GetAppliancesForHouse
) не будет ждать завершения первого завершения перед запуском.
Джим понимает, что мы должны ждать обоих методов только тогда, когда они необходимы. Чтобы они оба работали параллельно друг другу. Он думает, что выполнение этого по-моему приведет к тому, что второй метод ждет первого, то есть: GetAppliancesForHouse
ждет GetFurnitureForHouse
.
Правильно ли какое-либо из этих понятий? Или мы просто собираемся, когда мы идем? Когда мы должны ждать?