【发布时间】:2021-01-28 17:28:31
【问题描述】:
如果我调用了多个仍在等待的异步函数,并且程序在主线程上退出,是否仍在等待的任务会自动清理?或者,我是否需要确保在程序退出时手动清理任务?
在调用异步函数时特别询问,而不是使用new Thread()。
此外,在这种特定情况下,Task 指的是在调用async 函数并等待结果时生成的System.Threading.Tasks.Task。
似乎在 MSDN 中找不到答案(除非我找错地方了)。
【问题讨论】:
-
如果您使用
new Thread(),它们不会被“自动”清理。 -
async Tasks 和new Thread()创建的线程是完全不同的东西。此外,对于线程,您还可以设置IsBackground属性。通常,当Main()函数退出时,运行时确实等待前台线程,但不等待后台线程或任务IsBackground 当然,如果运行时不等待线程/任务完成,它们可能处于某种不确定的状态,这可能会导致数据损坏。 -
问题的标题与问题的正文不一致。标题询问任务,正文询问线程。你能edit这个问题并修正标题或正文吗?
-
@KJanek 在这种情况下我没有使用
new Thread() -
@TheodorZoulias 更新了问题和文本。希望它更清楚
标签: c# multithreading async-await background-process