理解await关键字之后的代码执行
在单线程应用程序中,await关键字可能会令人困惑。当代码在异步方法中遇到await 关键字时,它会返回到调用方法并将控制权交给UI 线程。然而,理解await之后的代码是如何执行的可能具有挑战性。
与主线程保持锁定的假设相反,await之后的代码可能由不同的线程执行。此行为由同步上下文决定。默认情况下,Task 的可等待模式采用等待表达式时当前的同步上下文。
例如,如果代码在 UI 线程内执行,则延续(await 之后的部分)将在同一 UI 线程上恢复执行。但是,在线程池线程的情况下,延续可能不一定在同一线程上恢复。
认识到阻塞 UI 线程至关重要,就像提供的代码中的 Wait() 调用一样样本,可以阻止继续执行。在任务可能涉及当前线程上的工作且其完成状态未知的情况下,不建议使用 Wait() 或 Result。
为了避免依赖默认同步上下文,可以使用 Task.ConfigureAwait 方法可以使用。这允许您指定延续可以在任何线程上执行,使其适合缺乏线程首选项的库方法。通过利用ConfigureAwait(false)语法,您表明希望将延续与当前上下文分离,从而促进更健壮的多线程代码。
以上是C# 中的'await”关键字后如何恢复代码执行?的详细内容。更多信息请关注PHP中文网其他相关文章!