Взаимоблокировки и полная асинхронность ⇐ 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 возврат давления в шинах; } }
При обсуждении фрагмента кода с коллегой возникли вопросы о его надежности. Особым предметом разногласий является использование 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 возврат давления в шинах; } }
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как решить проблему взаимоблокировки в ColdFusion 9: coldfusion.util.AbstractCache$Lock
Anonymous » » в форуме JAVA - 0 Ответы
- 8 Просмотры
-
Последнее сообщение Anonymous
-