C# 在C语言中使用Async/Await时,程序退出时任务是否自动终止?

C# 在C语言中使用Async/Await时,程序退出时任务是否自动终止?,c#,multithreading,async-await,background-process,C#,Multithreading,Async Await,Background Process,如果我调用了多个仍在等待的异步函数,并且程序在主线程上退出,那么仍在等待的任务是否会自动清理?或者,我是否需要确保在程序退出时手动清理任务 在调用异步函数时特别询问,而不是使用new Thread() 此外,在这种特定情况下,Task是指调用async函数并等待结果时生成的System.Threading.Tasks.Task 在MSDN中似乎找不到答案(除非我找错了地方) 等待的任务是否仍在自动清理 如果等待任务,则在任务完成之前程序不会退出。因此,如果程序退出,这意味着不等待任务。或者他们在

如果我调用了多个仍在等待的异步函数,并且程序在主线程上退出,那么仍在等待的任务是否会自动清理?或者,我是否需要确保在程序退出时手动清理任务

在调用异步函数时特别询问,而不是使用
new Thread()

此外,在这种特定情况下,
Task
是指调用
async
函数并等待结果时生成的
System.Threading.Tasks.Task

在MSDN中似乎找不到答案(除非我找错了地方)

等待的任务是否仍在自动清理

如果等待任务,则在任务完成之前程序不会退出。因此,如果程序退出,这意味着不等待任务。或者他们在一项任务中被等待,而这项任务本身并没有被等待。或者它们在一个方法中被等待,而这个方法并没有被定义所等待(一个
异步void
方法不返回任何可以等待的内容)

因此,我假设你正在处理未等待的任务,或者换句话说,处理“火与忘”任务。在大多数情况下,这些任务运行在属性等于
true
的线程上,或者根本不运行。这些任务将在任意执行点自动终止。但是,启动在前台线程上运行的任务并非不可能,在这种情况下,当任务完成时,或当程序从任务管理器中终止时,程序将终止

等待的任务是否仍在自动清理

如果等待任务,则在任务完成之前程序不会退出。因此,如果程序退出,这意味着不等待任务。或者他们在一项任务中被等待,而这项任务本身并没有被等待。或者它们在一个方法中被等待,而这个方法并没有被定义所等待(一个
异步void
方法不返回任何可以等待的内容)

因此,我假设你正在处理未等待的任务,或者换句话说,处理“火与忘”任务。在大多数情况下,这些任务运行在属性等于
true
的线程上,或者根本不运行。这些任务将在任意执行点自动终止。但是,启动在前台线程上运行的任务并非不可能,在这种情况下,当任务完成或从任务管理器终止程序时,程序将终止。

默认情况下,线程创建为前台进程(可以设置为在后台运行),任务创建为后台进程。应用程序不会在任何前台进程运行时终止。但是,当所有前台进程完成时,即使后台进程正在运行,应用程序也会终止。因此,即使未完成任务,任务也会终止

如果我们无法创建在前台线程中运行的任务,那么答案是肯定的,非等待的任务将始终在程序退出时终止。

默认情况下,线程创建为前台进程(可以设置为在后台运行),任务创建为后台进程。应用程序不会在任何前台进程运行时终止。但是,当所有前台进程完成时,即使后台进程正在运行,应用程序也会终止。因此,即使未完成任务,任务也会终止


如果我们无法创建在前台线程中运行的任务,那么答案是肯定的,非等待的任务将始终在程序退出时终止。

问题如果使用
new thread()
它们不会“自动”清理。
async task
s和
new thread()
创建的线程是完全不同的事情。此外,对于线程,还可以设置
IsBackground
属性。通常,当
Main()
函数退出时,运行时会等待放弃的线程,但不会等待后台线程或任务,当然,如果运行时不等待线程/任务完成,它们可能处于某种不确定状态,这可能会导致数据损坏。问题的标题与问题的主体不一致。标题询问任务,正文询问线程。你能回答问题并修正标题或正文吗?@KJanek在这种情况下,我没有使用
new-Thread()
@TheodorZoulias更新问题和文本。如果您使用
new Thread()
它们不是“自动”清理的,希望问题会更清楚。
async Task
s和
new Thread()
创建的线程是完全不同的事情。此外,对于线程,还可以设置
IsBackground
属性。通常,当
Main()
函数退出时,运行时会等待放弃的线程,但不会等待后台线程或任务,当然,如果运行时不等待线程/任务完成,它们可能处于某种不确定状态,这可能会导致数据损坏。问题的标题与问题的主体不一致。标题询问任务,正文询问线程。你能回答问题并修正标题或正文吗?@KJanek在这种情况下,我没有使用
new-Thread()
@TheodorZoulias更新问题和文本。希望你的第一句话是错误的。当存在未完成的任务时,程序完全有可能退出,甚至是分配了延续任务的未完成任务。@Servy我指的是等待的任务,“等待”是指应用程序的主线程最终将直接或间接地等待它们。也许“扎根”这个词比“等待”这个词更能表达我想要表达的意思,“任务”这个词之间有很大的区别