SW/C#

Timer Task 타이머 타스크

또난 2020. 7. 28. 18:49

스레드 방식 타이머 이용한 반복 작업... 돌아가기는 하는데...흠..

using System;
using System.Threading;

class TimerExample
{    
    private static readonly System.Threading.Timer[] TimerTask = new System.Threading.Timer[10];

    public class Task0
    {
        private int maxCount;
        private int index;
        public Task0(int count)
        {
            maxCount = count;
        }
        public void Run(Object stateInfo)
        {
            index = (int)stateInfo;
            Console.WriteLine("{0:h:mm:ss.fff}  Task0 Run stateInfo{1} {2} ",DateTime.Now, stateInfo.ToString(), maxCount);
            if (maxCount > 0)
            {
                maxCount--;
                if (maxCount == 0) TimerTask[index].Dispose();
            }
        }
    }

    public class Task1
    {
        private int maxCount;
        private int index;
        public Task1(int count)
        {
            maxCount = count;
        }
        public void Run(Object stateInfo)
        {
            index = (int)stateInfo;
            Console.WriteLine("{0:h:mm:ss.fff}  Task1 Run stateInfo{1} {2} ",DateTime.Now, stateInfo.ToString(), maxCount);
            if (maxCount > 0)
            {
                maxCount--;
                if (maxCount == 0) TimerTask[index].Dispose();
            }
        }
    }

    static void Main()
    {  
        Console.WriteLine("{0:h:mm:ss.fff} Creating timer.\n", DateTime.Now);        

        var task0 = new Task0(0);   // 무제한 반복.
        TimerTask[0] = new Timer(task0.Run, 0, 1000, 500);  // 1초 후 500ms 주기

        var task1 = new Task1(10);  // 10번만 반복.
        TimerTask[1] = new Timer(task1.Run, 1, 1000, 1000); // 1초 후 1초 주기 

        Console.Read();
    }
}