【问题标题】:Is it possible for the compiler to create async code that would have a StackOverflowException?编译器是否可以创建具有 StackOverflowException 的异步代码?
【发布时间】:2013-05-25 01:40:16
【问题描述】:

参考答案:https://stackoverflow.com/a/4047607/347172


基本上,由于编译器正在创建一个使用递归的状态机,有没有可能是一个具有“太多awaits 的类会导致编译器生成将抛出的代码例外?

【问题讨论】:

  • 如果你问编译器生成的状态机是否有可能遇到 StackOverflowException,我会说这是可能的,因为它是软件,但可能性很小。为什么要问?
  • @PauloMorgado:更好地了解 async/await 的工作原理以及它的局限性。
  • 好的。但我仍然想知道为什么这个具体问题。你不是如果它是可重入的(它不是),你是在问它是否有缺陷。

标签: c# stack-overflow async-await c#-5.0


【解决方案1】:

不是你想的那样。编译器会创建一个状态机,它将调度自己,而不是调用自己。调度会创建一个重置堆栈的“蹦床”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    • 2018-11-16
    • 2014-05-06
    • 2017-01-27
    • 1970-01-01
    • 1970-01-01
    • 2012-03-14
    相关资源
    最近更新 更多