在我的 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);
慕森卡
TA贡献1806条经验 获得超8个赞
问题似乎是您正在异步调用,但在继续之前没有等待任务完成。StartLotProcessing
理想情况下,您将在堆栈的整个过程中调用 use async/await:
await MoveLotCommand.Execute(0); ... await StartLotProcessing(currentAssemblyPlant);
如果您无法做到这一点,那么您应该致电
var task = StartLotProcessing(currentAssemblyPlant); ... task.Wait();
- 2 回答
- 0 关注
- 122 浏览
添加回答
举报
0/150
提交
取消
