Код после 'await Task.Delay (5000)' не выполняется до тех пор, пока не будет завершено выполнение команды relay - PullRequest
0 голосов
/ 31 января 2019

В моем приложении 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 ]

0 голосов
/ 31 января 2019

Проблема заключается в том, что вы вызываете StartLotProcessing асинхронно, но не ждете завершения задачи, прежде чем продолжить.

В идеале вы должны вызывать use async / await весь путь вверх по стеку:

await MoveLotCommand.Execute(0);
...
await StartLotProcessing(currentAssemblyPlant);

Если вы не можете этого сделать, вам следует позвонить

var task = StartLotProcessing(currentAssemblyPlant);
...
task.Wait();
0 голосов
/ 31 января 2019

Вы неправильно вызываете метод: вам не хватает оператора await для указания того, что вам нужно ждать, в противном случае вы эффективно запланируете задачу, но не ждете ее.Задание запланировано синхронно, следовательно, когда ваш метод возвращается.

Измените ваш вызов на этот, и проблема должна исчезнуть:

await StartLotProcessing(currentAssemblyPlant);
...