Взаимоблокировки и полная асинхронностьC#

Место общения программистов C#
Гость
Взаимоблокировки и полная асинхронность

Сообщение Гость »


При обсуждении фрагмента кода с коллегой возникли вопросы о его надежности. Особым предметом разногласий является использование Task.Run и Task.WhenAll в методе CreateAxelAsync.

Перейду к делу. У меня есть два вопроса по поводу приведенного ниже кода:
[*]Склонен ли он к взаимоблокировкам? [*]Нарушает ли это принцип полной асинхронности? публичная запись Vehicle( Axel FrontAxel, Axel RearAxel ) { } общедоступная запись Axel(IList Wheels) { } общедоступная запись Wheel( float TirePressure ) { } общедоступный статический класс VehicleFactory { // асинхронный public static async Task CreateAsync( intwheelsPerAxel ) { вар frontAxelTask ​​= CreateAxelAsync(wheelPerAxel); вар backAxelTask ​​= CreateAxelAsync (wheelsPerAxel); ждут Task.WhenAll(frontAxelTask, backAxelTask); вернуть новое транспортное средство (frontAxelTask.Result, backAxelTask.Result); } // асинхронный частная статическая асинхронная задача CreateAxelAsync( intwheelsPerAxel ) { варwheelTasks = новая задача[wheelPerAxel]; for (int i = 0; i CreateWheel(wheelIndex)); } Колесо[] колеса = ждут Task.WhenAll(wheelTasks); вернуть новый Аксель(колеса); } // синхронизация частное статическое колесо CreateWheel( intwheelIndex ) { float TirePressure = CalculateTirePressure(wheelIndex); вернуть новое колесо (tirePressure); } // синхронизация частный статический float CalculateTirePressure( intwheelIndex ) { плавающее давление в шинах; // выполняем некоторую обработку, связанную с процессором, и назначаем ее шинеPressure возврат давления в шинах; } }

Вернуться в «C#»