为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
元芳怎么了 2022-08-20 14:47:00
在我的 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 异步代码。任何帮助将不胜感激,并为我的解释感到抱歉。
查看完整描述

2 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

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

将你的调用更改为此,问题应该会消失:

await StartLotProcessing(currentAssemblyPlant);


查看完整回答
反对 回复 2022-08-20
?
慕森卡

TA贡献1806条经验 获得超8个赞

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

理想情况下,您将在堆栈的整个过程中调用 use async/await:

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

如果您无法做到这一点,那么您应该致电

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


查看完整回答
反对 回复 2022-08-20
  • 2 回答
  • 0 关注
  • 122 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号