[英]Use case for foreground and background threads
在C#線程中,默認情況下,新線程是前台線程。
但是后台線程的用例是什么?
另外,主線程在前台或后台線程上運行什么->?
根據MSDN ,前台線程和后台線程之間的主要區別是:
后台線程與前台線程相同,但有一個例外:后台線程不能使托管執行環境保持運行狀態。 一旦所有前台線程都已在托管進程中停止(.exe文件是托管程序集),系統將停止所有后台線程並關閉。
因此,后台線程的用例是不應阻止進程終止的任務。
如果使用線程監視活動(例如套接字連接),請將其IsBackground屬性設置為true,以使該線程不會阻止進程終止。
考慮到兩者之間的差異,UI線程應為前台線程,以便在UI關閉之前一直保持進程運行。 如果它是后台線程,則該進程將在沒有其他前台線程運行時立即停止運行。
編輯:
因為您可以在進程應該終止時向前台線程發出信號,所以我看不到任何無法僅使用前台線程實現的特殊用例。 由於可能需要通知那些線程釋放資源的終止或執行操作,因此,手動發出信號(而不是依靠它們會因為存在背景而終止的事實)是一個更好的選擇。 但是,使它們成為背景只是“以防萬一”的事情,如果由於某種原因它們沒有被發出信號,它們就不會阻止進程終止。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.