본문 바로가기

프로그래밍&IT/C#

Thread 관련 간단 정리2. 멀티스레드 관련 - ThreadPool

이번엔 멀티스레드관련해서 ThreadPool부터 진행합니다.


ThreadPool 이용한 비동기 메서드 호출 (System.Threading)

비동기 메서드 작업을 위해서 QueueUserWorkItem 메서드를 사용합니다.


namespace ConEx06

{

    class Program

    {

        static void Main(string[] args)

        {

            ThreadPool.QueueUserWorkItem(new WaitCallback(Async1));


//메인스레드 진행시키기.

            for(int n=0; n< 10; n++)

            {

                Thread.Sleep(1000);    //계속되는 일이라는 가상을 위해서 Sleep을

                Console.WriteLine("Main Thread...");

            }

            ThreadPool.QueueUserWorkItem(Async2, 10);        // 그냥 함수명을 쓸수도. 여기선 뭔가 값을 전달한다.

            for (int n = 0; n < 10; n++)

            {

                Thread.Sleep(1000);    //계속되는 일이라는 가상을 위해서 Sleep을

                Console.WriteLine("Main Thread...");

            }

        }


        private static void Async1(object state)

        {

            Thread.Sleep(3000);     //계속되는 일이라는 가상을 위해서 Sleep을

            Console.WriteLine("Threadpool Thread: Aysnc1");            

        }


        static void Async2(object x)

        {

            Thread.Sleep(3000);

            Console.WriteLine("x :{0}", (int) x);

        }

    }

}

- 결과

아래처럼 메인스레드는 계속 진행하는 도중에

해당 스레드가 작업이 진행되었다면 실행 및 결과를 보임