public CallbackItem(ManagementThreadControllerCallback callback)
            {
                Contract.Requires(callback != null);

                _callback    = callback;
                _startTimeMs = ManagementThreadController.GetTimestamp();
            }
            public CallbackItem(ManagementThreadControllerCallback callback)
            {
                TurboContract.Requires(callback != null, conditionString: "callback != null");

                _callback    = callback;
                _startTimeMs = TimeoutHelper.GetTimestamp();
            }
 /// <summary>
 /// Снять регистрацию колбэка
 /// </summary>
 /// <param name="callback">Коллбэк</param>
 public void UnregisterCallback(ManagementThreadControllerCallback callback)
 {
     Contract.Requires(callback != null);
     lock (_pendingRemoveItems)
     {
         _pendingRemoveItems.Add(callback);
     }
 }
 /// <summary>
 /// Deregisters callback
 /// </summary>
 /// <param name="callback">Callback delegate</param>
 public void UnregisterCallback(ManagementThreadControllerCallback callback)
 {
     TurboContract.Requires(callback != null, conditionString: "callback != null");
     lock (_pendingRemoveItems)
     {
         _pendingRemoveItems.Add(callback);
     }
 }
        public void TestRegisterDeregister()
        {
            int calledCount = 0;

            ManagementThreadControllerCallback act = (elapsed) =>
            {
                Interlocked.Increment(ref calledCount);
                return(true);
            };


            ManagementThreadController.Instance.RegisterCallback(act);

            TimingAssert.IsTrue(10 * ManagementThreadController.SleepPeriod, () => Volatile.Read(ref calledCount) > 0);

            ManagementThreadController.Instance.UnregisterCallback(act);
            int lastCallCount = calledCount;

            TimingAssert.AreEqual(2 * ManagementThreadController.SleepPeriod, lastCallCount, () => Volatile.Read(ref calledCount));
        }