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); } }
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; } } } }
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; } } } }