我有一个非常艰巨的任务,可以在函数的开头运行,但是随后在函数的后面需要结果。
该功能需要花费几秒钟来完成,因此没有理由不让该任务更早地运行。在这之间进行其他处理,然后等待更短的时间来完成。
analyzer.Parse()
是Task<IAnalyzerResult>
。
analyzer = new ExprAnalyzer(expr);
//start the task
analyzer.Parse().Start();
// [...] Do other stuff
// Now I need analyzer.Parse() to have finished
IAnalyzerResult res = await analyzer.Parse() //this obviously doesn't work.
// [...] Process the result
如何启动任务,然后在其他时间等待任务完成。简单地调用await analyzer.Parse();
并不能解决问题。
几年前,我读到了如何做的方法,但现在在Google和Stackoverflow上找不到任何东西。
答案 0 :(得分:6)
获取返回的任务:
Task<IAnalyzerResult> t = analyzer.Parse();
然后,等待其结果:
IAnalyzerResult res = await t;