【发布时间】:2016-04-07 03:50:09
【问题描述】:
我有以下
async void A () {
await B();
}
async Task B () {
await Task.Factory.StratNew( ()=> C());
}
async Task C () {
while (true) {
//await Task.Factory.StartNew(()=> {Thread.Sleep(5000);});
Thread.Sleep(5000);
}
}
在上面的程序中,A 永远不会返回,因为 C 中的 while 循环。但是,如果我取消注释 C 和 KEEP Thread.Sleep(5000) 内的行,A 会立即返回。有人可以解释那里发生了什么吗?
【问题讨论】:
-
当您取消注释该行时,您也会注释掉 Thread.Sleep(5000);对吗?
-
@rbaghbanli 不,我没有
-
StartNew is dangerous,您可能最终会在 UI 线程上运行代码,但您不希望它会这样,请改用 Task.Run。
标签: c# asynchronous async-await task