【发布时间】:2015-05-05 05:22:12
【问题描述】:
我刚刚测试了一些我确信会惨遭失败的东西,但令我惊讶的是,它完美无缺,并向我自己证明我仍然对 async-await 的工作原理感到困惑。
我创建了一个线程,传递了一个async void 委托作为线程的主体。
这是我的代码的过度简化:
var thread = new Thread( async () => {
while( true ) {
await SomeLengthyTask();
...
}
});
thread.Start();
thread.Join();
据我了解,当执行到await 关键字时,方法会隐式返回,在这种情况下是循环线程的主体,而其余代码被包装在回调继续中。
由于这个事实,我很确定线程会在await 产生执行后立即终止,但事实并非如此!
有人知道这个魔法实际上是如何实现的吗? 是 async 功能被剥离并且 async 同步等待还是 CLR 正在执行一些黑魔法使其能够恢复因await 而产生的线程?
【问题讨论】:
标签: c# .net multithreading asynchronous async-await