直到完成relaycommand的执行之后,“ await Task.Delay(5000)”之后的代码才执行

时间:2019-01-31 19:44:02

标签: c# wpf mvvm relaycommand

在我的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
    }

问题是,直到我的AutoRun()函数执行完成后,“ await Task.Delay(5000)”之后的代码才执行。

我正在尝试为我的for循环中的每个变量执行等待异步代码。

任何帮助将不胜感激,抱歉。

2 个答案:

答案 0 :(得分:2)

您没有正确调用该方法:您缺少await运算符以指示您必须等待,否则您可以有效地计划任务但不要等待它。该任务是以同步方式安排的,因此当您的方法返回时。

将您的呼叫更改为此,问题应该消失了:

await StartLotProcessing(currentAssemblyPlant);

答案 1 :(得分:1)

问题似乎在于您正在异步调用StartLotProcessing,但没有等待任务完成才继续前进。

理想情况下,您将调用async / await整个堆栈:

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

如果您无法执行此操作,则应致电

var task = StartLotProcessing(currentAssemblyPlant);
...
task.Wait();