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!
这里贴出图片,简易介绍代码执行流程
3.结合缓存封装使用
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;
}
}
4.总结
从Func的委托中,我们可以看出,它简化了我们自己定义委托带来的繁琐,同时它更好的结合了Lamdba的使用。减少了自定义函数的作用。同时也是有缺点的,就是错误的出现不容易发现是那里。Action委托的使用与Func雷同,这里就不在说了。希望自己的总结可以对大家有所帮助。
打个广告: 晨风电影 https://www.chenfengdy.top/
C#中Fun简单介绍及运用到项目中与缓存(本地缓存,Redis)结合使用的更多相关文章
- [翻译]Telnet简单介绍及在windows 7中开启Telnet客户端
文章翻译自 http://social.technet.microsoft.com/wiki/contents/articles/910.windows-7-enabling-telnet-clien ...
- JUnit中Assert简单介绍
junit中的assert方法全部放在Assert类中,总结一下junit类中assert方法的分类.1.assertTrue/False([String message,]boolean condi ...
- angular ng-repeat中DOM的重新渲染机制(项目中遇到问题)
昨天在项目中遇到一个问题:文本框中输入值只要变化就要请求接口获取数据赋值给couponData,这样性能不好.所以和服务器端沟通改成了服务器端一次性返回所有数据,这样前端只要获取一次数据然后保存在对象 ...
- iOS UIView中的坐标转换convertPoint --- iOS开发系列 ---项目中成长的知识六
如果你的UITableViewCell里面有一个Button需要响应事件,你会怎么做? 在Controller中使用 button父类的父类? 例如:UITableViewCell *parent ...
- 简单介绍下怎么在spring中使用RabbitMQ
这篇文章主要介绍了简单了解如何在spring中使用RabbitMQ,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 常见的消息中间件产品: (1)Ac ...
- Python 中lambda 简单介绍
转自:https://www.cnblogs.com/AlwaysWIN/p/6202320.html 在学习python的过程中,lambda的语法经常出现,现在将它整理一下,以备日后查看. 1.l ...
- redis介绍及在购物车项目中的应用,用户认证
1.redis 2.购物车的构建 api结构: models.py(创建完后自行添加数据) from django.db import models from django.contrib.conte ...
- TODO 疑问:java中的工厂类,在实际项目中如何运用
正在读core of java,工厂类一直没搞懂.感觉和静态方法相类似,但是不知道是怎么运用在实际中. 20190711: 读了设计模式,里面给出的解读是这样的 Define an interface ...
- [翻译]Mock 在 Python 中的使用介绍
目录 Mock 在 Python 中的使用介绍 原文链接与说明 恐惧系统调用 一个简单的删除函数 使用 Mock 重构 潜在陷阱 向 'rm' 中加入验证 将文件删除作为服务 方法 1:模拟实例的方法 ...
随机推荐
- Django-rest-framework源码分析----权限
添加权限 (1)API/utils文件夹下新建premission.py文件,代码如下: message是当没有权限时,提示的信息 # utils/permission.py class SVIPPr ...
- JAVA_SE基础——24.面向对象的内存分析
黑马程序员入学blog ... 接着上一章的代码: //车类 class Car{ //事物的公共属性使用成员变量描述. String name; //名字的属性 String color; //颜色 ...
- 【深度学习】深入理解Batch Normalization批标准化
这几天面试经常被问到BN层的原理,虽然回答上来了,但还是感觉答得不是很好,今天仔细研究了一下Batch Normalization的原理,以下为参考网上几篇文章总结得出. Batch Normaliz ...
- 第三章Hibernate关联映射
第三章Hibernate关联映射 一.关联关系 类与类之间最普通的关系就是关联关系,而且关联是有方向的. 以部门和员工为列,一个部门下有多个员工,而一个员工只能属于一个部门,从员工到部门就是多对一关联 ...
- 返回到前台的String出现乱码问题
使用springmvc给前天返回String类型的数据出现乱码问题可以在配置环境Spring-mvc.xml中添加如下代码 <mvc:annotation-driven> <mvc: ...
- C#程序编写规范
代码书写规则 1.尽量使用接口,然后使用类实现接口,提高程序的灵活性. 2.一行不要超过80个字符. 3.尽量不要手工更改计算机生成的代码,若必须要改,一定要改为和计算机生成的代码风格一样. 4.关键 ...
- HashMap就是这么简单【源码剖析】
前言 声明,本文用得是jdk1.8 前面已经讲了Collection的总览和剖析List集合以及散列表.Map集合.红黑树的基础了: Collection总览 List集合就这么简单[源码剖析] Ma ...
- [洛谷P1196][NOI2002]银河英雄传说 - 带偏移量的并查集(1)
Description 公元五八〇一年,地球居民迁至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发 ...
- 2018 6年iOS开发常用的三方库
开发一般APP必备三方库,省力秘籍!!!本篇文章会经常更新最新常用的三方. 1.网络请求库 AFNetworking https://github.com/AFNetworking/AFNetwork ...
- 框架学习之Struts2(四)---拦截器和标签
一.拦截器概述 1.1 在struts2框架中封装了很多功能,struts2里面封装的功能都是在拦截器里面,struts2里面又很多拦截器,但不是每次这些拦截器都执行,每次执行型默认的拦截器. 默认拦 ...