【发布时间】:2020-05-22 10:27:52
【问题描述】:
我已经在实践中了解了 Task 在 .net 中的工作原理,但我仍然对它的某些方面感到困惑。 在重构旧代码时,我碰巧在我的一个类中有以下未完成的代码:
private Task StartDataCollection()
{
// Some other code here but no Task.Run()
}
编译器当然会抱怨:
错误 CS0161 ...:并非所有代码路径都返回值
然后我在代码中添加了一个while循环,编译器错误消失了:
private Task StartDataCollection()
{
while(true)
{
}
}
出于好奇,我改变了如下的while循环,编译器再次抱怨同样的错误:
private Task StartDataCollection()
{
while(false)
{
}
}
这才是真正让我困惑的地方。如果编译器抛出错误 CS0161 是因为没有返回语句(或其他类似 Task.Run()),那么为什么使用 while(true) 可以修复它?这是否意味着后台的 while(true) 循环运行一个任务?我不这么认为......也许我在这里遗漏了一点。
【问题讨论】:
-
注意:如果这是您的意图,这不是您通常会编写和启动后台工作程序的方式。
标签: .net asynchronous while-loop compiler-errors task