Lap*_*mir 0 .net c# multithreading .net-core
我有 Windows 上的 .net core 和简单的代码。如您所见,没有Join()礼物。所以主线程不等待子线程,但是当我运行时:
C:\...\bin\Release\netcoreapp3.1>dotnet ConsoleAppTest.dll
> 4
> mission complete
> Thread complete
Run Code Online (Sandbox Code Playgroud)
C#代码:
C:\...\bin\Release\netcoreapp3.1>dotnet ConsoleAppTest.dll
> 4
> mission complete
> Thread complete
Run Code Online (Sandbox Code Playgroud)
我认为主线程应该运行而不是等待子线程。我错了吗?
当我启动时
Task.Run(() =>
{
Thread.Sleep(10000);
Console.WriteLine("Thread complete");
});
Run Code Online (Sandbox Code Playgroud)
主线程不等待
来自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();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
694 次 |
| 最近记录: |