C#中Fun简单介绍及运用到项目中与缓存(本地缓存,Redis)结合使用
2024-10-10 16:47:58
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/
最新文章
- (转载)TCP/IP的三次握手与四次挥手
- 【转】BAT 延迟变量
- Webservice 调用方式整理
- WPF学习笔记-TextBox光标位置如何放到最后?
- OD: Exploit Me - Inject Instruction
- php 父类子类构造函数注意事项
- 移动端 new CustomEvent(&#39;input&#39;) 兼容问题
- C语言中结构体定义实际上相当于变量入栈
- UX2内核浏览加速技术纲要
- CodeForces - 1013B And 与运算暴力
- pycharm激活方式
- Imbalanced Array CodeForces - 817D (思维+单调栈)
- wb 黑名单批量操作
- 给linux服务器添加一块新的磁盘
- Redis 分布式缓存 Java 框架
- veterbi
- Trailing Zeroes (III) (二分)题解
- bzoj千题计划115:bzoj1024: [SCOI2009]生日快乐
- 【php】提交的特殊字符会被自动转义
- Flask之数据库操作
热门文章
- PHP类的自动加载
- NHibernate优点和缺点:
- 记java应用linux服务单个CPU使用率100%分析
- spring mvc跨域(post)--filter方案
- TreeMap就这么简单【源码剖析】
- Java:import com.sun.awt.AWTUtilities;报错
- hdu1789 Doing Homework again---(经典贪心)
- [论文阅读] A Discriminative Feature Learning Approach for Deep Face Recognition (Center Loss)
- jacascript 立即执行函数(IIFE)与闭包
- 关于MySQL Online DDL