设为首页 加入收藏

TOP

C#函数式编程(五)
2017-10-13 10:42:28 】 浏览:10576
Tags:函数 编程
       foreach (Action action in actions)

action();

        }

 

缓存技术

怎样使用闭包来实现缓存。如果我们创建了一个用于缓存的接收函数就可以实现缓存,并返回一个在一段时间内缓存结果的新函数。以下列表显示的例子:

            public static Func<T> Cache<T>(this Func<T> func, int cacheInterval)

            {

                var cachedValue = func();

                var timeCached = DateTime.Now;

                Func<T> cachedFunc = () => {

                if ((DateTime.Now - timeCached).Seconds >= cacheInterval)

                {

                        timeCached = DateTime.Now;

                        cachedValue = func();

                     }

                     return cachedValue;

                };

                return cachedFunc;

            }

变量 cacheInterval, cachedValue 和 timeCached 绑定到缓存的函数并作为函数的一部分。这个可以让我们记住最后的值并确认被缓存多长时间。

 

下面的例子中我们可以看到如何使用这个扩展来缓存函数值和返回当前时间:

Func<DateTime> now = () => DateTime.Now;

            Func<DateTime> nowCached = now.Cache(4);

            Console.WriteLine("\tCurrent time\tCached time");

            for (int i = 0; i < 20; i++)

            {

                Console.WriteLine("{0}.\t{1:T}\t{2:T}", i + 1, now(), nowCached());

                Thread.Sleep(1000);

            }

 

惰性求值

C#语言小部分采用了非严格求值策略,大部分还是严格求值策略。

非严格求值的例子:逻辑或

static void NonStricteva luation()

        {

            bool ret = true || DoSomeThing() > 0;

 &n

首页 上一页 2 3 4 5 6 下一页 尾页 5/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C#利用WinForm调用WebServices实.. 下一篇如何C#操作SQLite数据库

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目