“await Task.Delay(5000)”之后的代码在中继命令的执行完成之前不执行

在我的 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()函数执行完成之前不会执行。


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


任何帮助将不胜感激,并为我的解释感到抱歉。


元芳怎么了
浏览 123回答 2
2回答

烙印99

您没有正确调用该方法:您缺少 await 运算符来指示您必须等待,否则您有效地安排了任务,但不要等待它。任务以同步方式计划,因此当您的方法返回时。将你的调用更改为此,问题应该会消失:await&nbsp;StartLotProcessing(currentAssemblyPlant);

慕森卡

问题似乎是您正在异步调用,但在继续之前没有等待任务完成。StartLotProcessing理想情况下,您将在堆栈的整个过程中调用 use async/await:await&nbsp;MoveLotCommand.Execute(0); ... await&nbsp;StartLotProcessing(currentAssemblyPlant);如果您无法做到这一点,那么您应该致电var&nbsp;task&nbsp;=&nbsp;StartLotProcessing(currentAssemblyPlant); ... task.Wait();
打开App,查看更多内容
随时随地看视频慕课网APP