Код после 'await Task.Delay(5000)' не выполняется до тех пор, пока не завершится выполнение команды relay
В моем приложении WPF я вызываю relaycommand
private void AutoRun(object parameter)
{
for(int i=0;i<10;i++)
{
MoveLotCommand.Execute(0);
}
}
который вызывает другую команду реле
private void MoveLot(object parameter)
{
//Some Code
var Task = StartLotProcessing(currentAssemblyPlant);
}
}
и эта команда реле вызовет другую асинхронную функцию
async Task StartLotProcessing(int currentAssemblyPlant)
{
await Task.Delay(5000);
var nextAssemblyPlant = currentAssemblyPlant + 1;
//Process after await
}
Проблема в том, что мой код после 'await Task.Delay(5000)' не выполняется, пока не завершится выполнение моей функции AutoRun().
Я пытаюсь выполнить асинхронный код await для каждой переменной в цикле for.
Любая помощь будет оценена и извините за мои объяснения.
2 ответа
Вы неправильно вызываете метод: вам не хватает оператора await для указания того, что вам нужно ждать, в противном случае вы эффективно запланируете задачу, но не ждете ее. Задача запланирована в синхронном режиме, следовательно, когда ваш метод возвращается.
Измените свой вызов на это, и проблема должна исчезнуть:
await StartLotProcessing(currentAssemblyPlant);
Проблема в том, что вы звоните StartLotProcessing
асинхронно, но не дожидаясь завершения задачи, прежде чем двигаться дальше.
В идеале вы должны вызывать use async/await весь путь вверх по стеку:
await MoveLotCommand.Execute(0);
...
await StartLotProcessing(currentAssemblyPlant);
Если вы не можете сделать это, то вам следует позвонить
var task = StartLotProcessing(currentAssemblyPlant);
...
task.Wait();