在我的 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 關注
- 119 瀏覽
添加回答
舉報
0/150
提交
取消
