這個問題在這里已經有了答案: 在這種情況下主執行緒會發生什么 (4 個回答) 4 小時前關閉。
我在 Windows 上有 .net 核心和簡單的代碼。如您所見,沒有Join()禮物。所以主執行緒不等待孩子,但是當我運行時:
C:\...\bin\Release\netcoreapp3.1>dotnet ConsoleAppTest.dll
> 4
> mission complete
> Thread complete
C#代碼:
static void Main(string[] args)
{
new Thread(() =>
{
Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(10000);
Console.WriteLine("Thread complete");
}).Start();
Console.WriteLine("mission complete");
}
我認為主執行緒應該運行而不是等待孩子。我錯了嗎?
當我啟動
Task.Run(() =>
{
Thread.Sleep(10000);
Console.WriteLine("Thread complete");
});
主執行緒不等待
uj5u.com熱心網友回復:
從Thread.IsBackground檔案:
后臺執行緒與前臺執行緒相同,只是后臺執行緒不會阻止行程終止。一旦屬于一個行程的所有前臺執行緒都終止,公共語言運行時就會結束該行程。
和
默認情況下,以下執行緒在前臺執行(即它們的
IsBackground屬性回傳false):
- 主執行緒(或主應用程式執行緒)。
- 通過呼叫
Thread類建構式創建的所有執行緒。
您正在創建防止行程終止的前臺執行緒。
另請注意,由于引入TPL通常不建議直接使用執行緒,但如果有特殊原因讓您使用它們,您可以將該IsBackground屬性設定true為允許行程終止:
var thread = new Thread(() =>
{
Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(1000);
Console.WriteLine("Thread complete");
});
thread.IsBackground = true;
thread.Start();
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/364132.html
下一篇:按鈕內容不更新[MVVM]
