static void Main(string[] args)
        {
            var worker = new Worker();

            worker.WorkPerformed += new EventHandler <WorkPerformedEvenArgs>(Worker_WorkPerformed1);
            worker.WorkPerformed += Worker_WorkPerformed2; // Delegate inference
            worker.WorkCompleted += (s, e) => Console.WriteLine("!!!Work Completed!!!".ToUpper());;
            worker.DoWork(5, WorkType.GenerateReports);


            BizRulesDelegate AddDel   = new BizRulesDelegate((x, y) => x + y);
            BizRulesDelegate Multiply = (x, y) => x * y;
            var data = new ProcessData();

            data.Process(2, 3, AddDel);


            Action <int, int> AddAction      = (x, y) => Console.WriteLine(x + y);
            Action <int, int> MultiplyAction = (x, y) => Console.WriteLine(x * y);

            data.ProcessAction(2, 3, MultiplyAction);


            Func <int, int, int>  funcAddDel      = (x, y) => x + y;
            Func <int, int, int>  funcMultiplyDel = (x, y) => x * y;
            Func <int, int, bool> compareNumbers  = (x, y) => x == y;
            Func <bool>           returnTrue      = () => true;

            data.ProcessFuncBool(returnTrue);
            data.ProcessFunc(4, 11, compareNumbers);
        }