C#中Fun简单介绍及运用到项目中与缓存(本地缓存,Redis)结合使用

lihuanancn 2018-04-24 原文

C#中Fun简单介绍及运用到项目中与缓存(本地缓存,Redis)结合使用

 1.简单介绍Fun

     C#中Fun和Action有点类似,都是一个委托方法,不同的是Func是有返回值的,而Action没有。

 

    (T)此委托封装的方法的参数类型。

    备注:详情了解Fun到(https://www.cnblogs.com/LipeiNet/p/4694225.html
      

  2.简单例子介绍
        这面全局定义了一个字典,封装一个方法定义两个参数为string类型,一个委托。假设调用方法传入一个key,如果存在字典返回一个Value,如果不存则通过委托返回key!
    这里贴出图片,简易介绍代码执行流程
   


       2.结合缓存封装使用

      
       1).获取数据
         

        /// <summary>
        /// 获取数据
        /// </summary>
        public void GetConfigsValue()
        {
            var key = "SysKeyInfo";
            var keyDic = GetDataLocalCache<string>(key, () =>
            {

                using (EntityContext db = new EntityContext())
                {
                    var value = db.Configs.FirstOrDefault(o => o.Name == "SysKeyInfo").Value;
                    return value;
                }

            }, DateTime.Now.AddHours(2));
        }

 

  

 

       2).获取缓存

        

  /// <summary>
        /// 获取缓存数据
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="key">缓存key</param>
        /// <param name="callBack">委托方法名</param>
        /// <param name="timeout">缓存过期时间</param>
        /// <returns></returns>
        public static T GetDataLocalCache<T>(string key, Func<T> callBack, DateTime? timeout = null)
        {
            if (!timeout.HasValue) timeout = DateTime.Now.AddMinutes(5);
            var cache = HttpRuntime.Cache[key];
            //如果缓存不存在或者过期则执行委托方法
            if (cache == null)
            {
                var result = callBack();
                if (result != null)
                    //将委托方法执行结果存入缓存中
                    HttpRuntime.Cache.Insert(key, result, null, timeout.GetValueOrDefault(), System.Web.Caching.Cache.NoSlidingExpiration);
                return result;
            }
            else
            {
                return (T)cache;
            }
        }

 

  

 

       3.总结
       Func的委托中,我们可以看出,它简化了我们自己定义委托带来的繁琐,同时它更好的结合了Lamdba的使用。减少了自定义函数的作用。同时也是有缺点的,就是错误的出现不容易发现是那里。Action委托的使用与Func雷同,这里就不在说了。希望自己的总结可以对大家有所帮助。
   
打个广告:       晨风电影    https://www.chenfengdy.top/  
   

 

发表于 2018-04-24 15:56 李桦楠 阅读() 评论() 编辑 收藏

 

版权声明:本文为lihuanancn原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/lihuanancn/p/8931192.html

C#中Fun简单介绍及运用到项目中与缓存(本地缓存,Redis)结合使用的更多相关文章

随机推荐

  1. 如何查看Linux的内存使用率

    Linux不像Windows,你不会总是可以看到一个图形化的系统界面,特别是在服务器环境中。作为 Linux 管理员,了解如何检查可用和已用资源(如内存、CPU、磁盘空间等)非常重要。如果有任何应用程序在系统上使用过多的资源来以最佳级别运...

  2. 6月22号开学! 第7期《jmeter实战接口自动化+性能》课程,零基础也能学

    2019年 第7期《jmeter实战接口自动化+性能》课程,6月22号开学! 主讲老师:飞天小子 上课方式:Q […]...

  3. Mysql 常用函数(1)- 常用函数汇总

    Mysql常用函数的汇总,可看下面系列文章     Mysql常用函数有哪几类 数值型函数 字符串型函数 日期 […]...

  4. 哈夫曼编码与解码

    这是我的第一篇博客,希望大神们批评指正。 首先介绍以下什么是哈夫曼树(来自百度百科) 哈夫曼树─即最优二叉树, […]...

  5. 计算机网络08:因特网上的视频音频服务

    目录 8.1、概述 8.2、流式存储音频/视频 8.3、IP 电话 计算机网络:因特网上的视频音频服务 8.1 […]...

  6. 响应者链UIResponder-扩大UIButton的点击范围

    在开发中,我们经常看到有按钮等的点击,会出现响应事件。按钮->view->ViewControll […]...

  7. 【进阶之路】自定义注解介绍与实战

    在使用spring框架的时候,我们经常会感叹注解式编程真是大大简化了开发的时间,几个小小的注解,就能解决一系列 […]...

  8. linux lsof/netstat查看进程和端口号相关命令:

    本文为博主原创,未经允许不得转载:        在linux操作时,经常要查看运行的项目的进程和端口号,在这 […]...

展开目录

目录导航