繁体   English   中英

'await Task.Delay(5000)'之后的代码在relaycommand的执行完成之前没有执行

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

在我的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);

        }
    }

这个relay命令会调用另一个异步函数

    async Task StartLotProcessing(int currentAssemblyPlant)
    {
        await Task.Delay(5000);
        var nextAssemblyPlant = currentAssemblyPlant + 1;

        //Process after await
    }

问题是,'await Task.Delay(5000)之后的代码在我的AutoRun()函数执行完成之前不会执行。

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

任何帮助将不胜感激,对不起我的解释。

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

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

await StartLotProcessing(currentAssemblyPlant);

问题似乎是您正在异步调用StartLotProcessing但在继续之前不等待任务完成。

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

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

如果你不能这样做,那么你应该打电话

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM