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); |
问题似乎是您正在异步调用
理想情况下,您将在整个堆栈中使用async / await进行调用:
1 2 3 | await MoveLotCommand.Execute(0); ... await StartLotProcessing(currentAssemblyPlant); |
如果您无法执行此操作,则应致电
1 2 3 | var task = StartLotProcessing(currentAssemblyPlant); ... task.Wait(); |