Код после '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();
Другие вопросы по тегам