Async / Await的功能是否影响时序?

时间:2016-11-18 21:31:24

标签: c# asynchronous

我将从另一篇文章中提及this answer by Stephen Cleary

我正在尝试实现类似的东西,但我对C#还不熟悉。

我的问题是:await已应用于ReadAsync,如果ReadAsync尚未完成,则会从ReadAllFileAsync方法返回Main,然后,会发生什么? Main是否继续运行?

我的问题的原因是我想知道秒表经过的时间会受此影响。 如果重要的工作是阅读文件(因为我们正在计时),并且没有可能被阻止的UI,为什么要使用async / await

1 个答案:

答案 0 :(得分:0)

  

我将在另一篇文章中提到Stephen Cleary的回答。

好的,但请务必留意Mike Marynowski的评论。这很重要。

  

await应用于ReadAsync,如果ReadAsync尚未完成,则它从ReadAllFileAsync方法返回Main,然后会发生什么? Main继续运行吗?

是。 Main继续执行,接下来要做的就是从Wait返回的任务调用ReadAllFileAsync,它阻塞当前线程直到方法完成。阻止这样的任务通常是一个坏主意,但必须在控制台应用程序的Main方法中完成,以防止应用程序退出。

通常,在为异步方法计时时,您需要在调用方法之前立即启动计时器,并在返回的任务完成后停止计时器。这通常是在await任务之后停止计时器来完成的,但在该示例中,它是通过在Wait任务之后停止计时器来完成的。