关于c#:直到完成relaycommand的执行之后,’await Task.Delay(5000)’之后的代码才执行

Code after 'await Task.Delay(5000)' is not executing until the execution of relaycommand is completed

在我的WPF应用程序中,我正在调用relaycommand

1
2
3
4
5
6
7
8
9
    private void AutoRun(object parameter)
    {
        for(int i=0;i<10;i++)
        {
        MoveLotCommand.Execute(0);

        }

    }

依次调用另一个中继命令

1
2
3
4
5
6
7
8
  private void MoveLot(object parameter)
    {
        //Some Code

            var Task = StartLotProcessing(currentAssemblyPlant);

        }
    }

,此中继命令将调用另一个异步函数

1
2
3
4
5
6
7
    async Task StartLotProcessing(int currentAssemblyPlant)
    {
        await Task.Delay(5000);
        var nextAssemblyPlant = currentAssemblyPlant + 1;

        //Process after await
    }

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

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

任何帮助将不胜感激,对于我的解释,我们深表歉意。


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

将此更改为您的电话,问题应消失:

1
await StartLotProcessing(currentAssemblyPlant);

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

理想情况下,您将在整个堆栈中使用async / await进行调用:

1
2
3
await MoveLotCommand.Execute(0);
...
await StartLotProcessing(currentAssemblyPlant);

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

1
2
3
var task = StartLotProcessing(currentAssemblyPlant);
...
task.Wait();