在我的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
}
问题是,直到我的AutoRun()函数执行完成后,“ await Task.Delay(5000)”之后的代码才执行。
我正在尝试为我的for循环中的每个变量执行等待异步代码。
任何帮助将不胜感激,抱歉。
答案 0 :(得分:2)
您没有正确调用该方法:您缺少await运算符以指示您必须等待,否则您可以有效地计划任务但不要等待它。该任务是以同步方式安排的,因此当您的方法返回时。
将您的呼叫更改为此,问题应该消失了:
await StartLotProcessing(currentAssemblyPlant);
答案 1 :(得分:1)
问题似乎在于您正在异步调用StartLotProcessing
,但没有等待任务完成才继续前进。
理想情况下,您将调用async / await整个堆栈:
await MoveLotCommand.Execute(0);
...
await StartLotProcessing(currentAssemblyPlant);
如果您无法执行此操作,则应致电
var task = StartLotProcessing(currentAssemblyPlant);
...
task.Wait();