Не могли бы вы вкратце объяснить мне, почему первые две строки этого кода не выполняются параллельно? Как я могу заставить его работать параллельно?
SensorLeft и SensorRight относятся к одному и тому же классу, а Distance является его общедоступным свойством, для вычисления которого требуется некоторое время при вызове его метода get.
Что я делаю неправильно? Должен ли я сделать расчет расстояния как асинхронную функцию, чтобы быть правильным?
public async void GetDistance()
{
await Task.Run(() => LeftDistance = SensorLeft.Distance);
await Task.Run(() => RightDistance = SensorRight.Distance);
Distance = RightDistance < LeftDistance ? RightDistance:LeftDistance;
}
await
выполняете первую задачу, вы ждете ее завершения, прежде чем перейти к следующей строке кода. Сначала назначьте задачи, а затем используйтеTask.WhenAll
, чтобы они выполнялись одновременно. - person JSteward   schedule 25.01.2018async void
предназначен только для обработчиков событий. Вы должны использоватьasync Task
.await
означает ожидание завершения асинхронной операции. Параллельно начинает работатьTask.Run
, а неawait
. Если вы хотите, чтобы операции выполнялись параллельно, сохраните возвращенные задачи в массиве и используйтеawait Task.WhenAll(tasks)
, чтобы дождаться их завершения. - person Panagiotis Kanavos   schedule 25.01.2018