[英]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.