C# thread

C#에서 Thread메인 함수(프로그램 진입점)가 끝나도 실행을 계속할지 여부가 스레드의 종류에 따라 달라집니다.

스레드에는 두 가지 종류가 있습니다:

  1. 포그라운드 스레드 (Foreground Thread)
  2. 백그라운드 스레드 (Background Thread)

1. 포그라운드 스레드 (Foreground Thread)

  • 기본적으로 생성된 스레드는 포그라운드 스레드입니다.
  • 포그라운드 스레드는 메인 함수가 종료되더라도 스레드가 모두 종료될 때까지 프로그램이 계속 실행됩니다.

예제 코드:

using System;
using System.Threading;

class Program
{
    static void Main()
    {
        Thread thread = new Thread(() =>
        {
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine($"스레드 실행 중: {i}");
                Thread.Sleep(1000);
            }
        });

        thread.Start();

        Console.WriteLine("메인 함수 종료");
    }
}

출력:

메인 함수 종료
스레드 실행 중: 0
스레드 실행 중: 1
스레드 실행 중: 2
...
  • 메인 함수가 먼저 종료되지만, 스레드는 계속 실행됩니다.
  • 이유: thread포그라운드 스레드이기 때문에 프로그램이 종료되지 않습니다.

2. 백그라운드 스레드 (Background Thread)

  • 백그라운드 스레드는 메인 함수 종료 시 즉시 중단됩니다.
  • 메인 스레드가 종료되면, 모든 백그라운드 스레드도 종료됩니다.

백그라운드 스레드 설정 예제:

using System;
using System.Threading;

class Program
{
    static void Main()
    {
        Thread thread = new Thread(() =>
        {
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine($"스레드 실행 중: {i}");
                Thread.Sleep(1000);
            }
        });

        thread.IsBackground = true; // 백그라운드 스레드로 설정
        thread.Start();

        Console.WriteLine("메인 함수 종료");
    }
}

출력:

메인 함수 종료
  • 메인 함수 종료와 함께 백그라운드 스레드도 종료됩니다.
  • 이유: IsBackground = true로 설정했기 때문에 백그라운드 스레드는 메인 스레드 종료 시 강제 종료됩니다.

정리

  • 기본적으로 Thread포그라운드 스레드로 생성되며, 메인 함수가 종료되어도 계속 실행됩니다.
  • 스레드를 백그라운드 스레드로 설정하려면 IsBackground = true를 설정해야 합니다.
  • 포그라운드 스레드: 메인 스레드 종료 후에도 실행됨.
  • 백그라운드 스레드: 메인 스레드 종료 시 함께 종료됨.