我找到了以下代码片段,并想知道该Func<object> getObject
属性的目的是什么:
public void InsertCacheItem(string key, Func<object> getObject, TimeSpan duration)
{
try
{
var value = getObject();
if (value == null)
return;
key = GetCacheKey(key);
_cache.Insert(
key,
value,
null,
System.Web.Caching.Cache.NoAbsoluteExpiration,
duration,
System.Web.Caching.CacheItemPriority.Normal,
null);
}
catch { }
}
Run Code Online (Sandbox Code Playgroud)
如何通过传递Func属性来调用此特定函数?
你可以这样称呼:
InsertCacheItem("bob", () => "valuetocache", TimeSpan.FromHours(1));
Run Code Online (Sandbox Code Playgroud)
但为什么这样呢?为什么不直接传入"valuetocache"?好吧,主要是由于try..catch
.写入的代码意味着即使Func
执行失败,调用代码也不会受到影响.
所以:
InsertCacheItem("bob", () => MethodThatThrowsException(), TimeSpan.FromHours(1));
Run Code Online (Sandbox Code Playgroud)
例如,仍然可以工作.它不会缓存任何内容,但它不会冒出调用代码的异常.