コード例 #1
0
        private void DelayUnblockProc()
        {
            var wh = new WaitHandle[] { _evExit, _evGotDelayedUnblock };

            while (true)
            {
                NotificationDelayedUnblock unblock = null;
                lock (_delayedUnblocks)
                {
                    if (_delayedUnblocks.Count != 0)
                    {
                        unblock = _delayedUnblocks.Dequeue();
                    }
                }
                if (unblock == null)
                {
                    if (WaitHandle.WaitAny(wh) == 0)
                    {
                        return;
                    }
                    continue;
                }
                var now = DateTime.UtcNow;
                var dt  = _unblockDelayTime - (int)(now - unblock.CreatedOn).TotalMilliseconds;
                if (dt < 0)
                {
                    dt = 0;
                }
                if (_evExit.WaitOne(dt))
                {
                    return;
                }
                UnblockNotification(unblock);
            }
        }
コード例 #2
0
 private void UnblockNotification(NotificationDelayedUnblock unblock)
 {
     lock (_blockedNotifications)
     {
         for (int i = _blockedNotifications.Count - 1; i >= 0; --i)
         {
             var notification = _blockedNotifications[i];
             if ((notification.Key == unblock.Key) &&
                 (notification.NotificationType == unblock.NotificationType))
             {
                 _blockedNotifications.RemoveAt(i);
                 break;
             }
         }
     }
 }
コード例 #3
0
ファイル: RepositoryMonitor.cs プロジェクト: Kuzq/gitter
 private void UnblockNotification(NotificationDelayedUnblock unblock)
 {
     lock(_blockedNotifications)
     {
         for(int i = _blockedNotifications.Count - 1; i >= 0; --i)
         {
             var notification = _blockedNotifications[i];
             if ((notification.Key == unblock.Key) &&
                 (notification.NotificationType == unblock.NotificationType))
             {
                 _blockedNotifications.RemoveAt(i);
                 break;
             }
         }
     }
 }