Взаимоблокировки и полная асинхронность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 возврат давления в шинах; } }
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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