[英]Use case for foreground and background threads
在C#线程中,默认情况下,新线程是前台线程。
但是后台线程的用例是什么?
另外,主线程在前台或后台线程上运行什么->?
根据MSDN ,前台线程和后台线程之间的主要区别是:
后台线程与前台线程相同,但有一个例外:后台线程不能使托管执行环境保持运行状态。 一旦所有前台线程都已在托管进程中停止(.exe文件是托管程序集),系统将停止所有后台线程并关闭。
因此,后台线程的用例是不应阻止进程终止的任务。
如果使用线程监视活动(例如套接字连接),请将其IsBackground属性设置为true,以使该线程不会阻止进程终止。
考虑到两者之间的差异,UI线程应为前台线程,以便在UI关闭之前一直保持进程运行。 如果它是后台线程,则该进程将在没有其他前台线程运行时立即停止运行。
编辑:
因为您可以在进程应该终止时向前台线程发出信号,所以我看不到任何无法仅使用前台线程实现的特殊用例。 由于可能需要通知那些线程释放资源的终止或执行操作,因此,手动发出信号(而不是依靠它们会因为存在背景而终止的事实)是一个更好的选择。 但是,使它们成为背景只是“以防万一”的事情,如果由于某种原因它们没有被发出信号,它们就不会阻止进程终止。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.