zoukankan      html  css  js  c++  java
  • 事件过滤(EventFilter)


    1.引言

    上节介绍了事件持久化,就是事件恢复执行,有时候Timer启动时,时间已经过了很久了,这样的话,事件恢复执行,可能会出现很多,但并不希望它们都出执行,而是有选择性的执行,这就是这节介绍的过滤器EventFilter。

    2.EventFilter

    Scheduled Timer提供了一个过滤器接口,先来看看接口声明

        public interface IResultFilter
        {
            void FilterResultsInInterval(DateTime start, DateTime end, List<DateTime> list);
        }

    很简单,一个方法,提供3个参数,应该可以满足基本需求,具体的实现,要看需求,主要是最后一个参数List就是我们所有的事件,主要是对这个list进行操作。下面看一个简单的实现。

    复制代码
        /// <summary>
        /// 计算最后一件事件
        /// </summary>
        public class LastEventFilter : IResultFilter
        {
            public static IResultFilter Filter = new LastEventFilter();
    
            private LastEventFilter() { }
    
            public void FilterResultsInInterval(DateTime start, DateTime end, List<DateTime> list)
            {
                if (list == null)
                    return;
                if (list.Count < 2)
                    return;
    
                list.Sort();
                list.RemoveRange(0, list.Count - 1);
            }
        }
    复制代码

    算出最后一个事件时间,简单吧,前面两个参数都还没用到,复杂的需求的话,如 要大于某个时间点,进行过滤等等。

    应用于哪里?一肯定事件集合已经计算出来了,二事件还没有执行,就应用在这两者之间。

    Scheduled Timer是应用在时间调度集合计算出来之后,也就是IScheduledItem的AddEventsInInterval方法后,再调用这个过滤器,进行过滤。

    3.总结

    Scheduled Timer提供了空过滤、计算第一件事、最后一件事等过滤器,这个要按需求,实现很简单,只要实现IResultFilter即可。

    作者:Qlin 
    出处:http://www.cnblogs.com/qqlin/ 
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

    标签: timer
  • 相关阅读:
    Bit Manipulation
    218. The Skyline Problem
    Template : Two Pointers & Hash -> String process
    239. Sliding Window Maximum
    159. Longest Substring with At Most Two Distinct Characters
    3. Longest Substring Without Repeating Characters
    137. Single Number II
    142. Linked List Cycle II
    41. First Missing Positive
    260. Single Number III
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2701075.html
Copyright © 2011-2022 走看看