public void SubscribeUnsubscribeAndInvoke()
        {
            eventClass             = new BasicEventClass();
            eventClass.BasicEvent += InvokableMethod;
            eventClass.BasicEvent -= InvokableMethod;

            eventClass.RaiseBasicEventWithNoArgs();
        }
        public void SubscribeAndInvokeMultipleTimes()
        {
            int times = 10;

            eventClass             = new BasicEventClass();
            eventClass.BasicEvent += InvokableMethod;

            for (int i = 0; i < times; i++)
            {
                eventClass.RaiseBasicEventWithNoArgs();
            }
        }
        public void SubscribeUnsubscribeAndInvoke2()
        {
            int subscribeCount   = 10;
            int unsubscribeCount = 5;

            eventClass = new BasicEventClass();

            var subscribeToBasicEvent = new Action(() => eventClass.BasicEvent += InvokableMethod);

            ActionExecutor(subscribeToBasicEvent, subscribeCount);
            var unsubscribeToBasicEvent = new Action(() => eventClass.BasicEvent -= InvokableMethod);

            ActionExecutor(unsubscribeToBasicEvent, unsubscribeCount);

            eventClass.RaiseBasicEventWithNoArgs();
        }
        public void SafeSubscribePractice()
        {
            eventClass = new BasicEventClass();

            eventClass.SafeSubscribe(InvokableMethod);
            // Expect a single invocation of the InvokableMethod;
            eventClass.RaiseBasicEventWithNoArgs();

            eventClass.SafeSubscribe(InvokableMethod);
            // Expect a single invocation of the InvokableMethod;
            eventClass.RaiseBasicEventWithNoArgs();


            eventClass.SafeUnsubscribe(InvokableMethod);
            eventClass.RaiseBasicEventWithNoArgs();
        }