我正在尝试创建一些关于库中方法调用持续时间的统计信息.我想创建一个执行这些重复步骤的通用操作和函数,而不是将每个方法调用包装到包含时间线的库并跟踪它.
例如,对于不返回值的方法,我创建了这个:
private readonly Action<string, Action> timedAction = (name, action) =>
{
var sw = Stopwatch.StartNew();
action.Invoke();
trackDuration(name, sw.ElapsedMilliseconds);
};
Run Code Online (Sandbox Code Playgroud)
可以调用timedAction("methodname", () => lib.methodname()).
我想为返回值的方法做类似的事情,但显然Action不能用于此目的,因为它不能返回值.
有没有办法用泛型来做到这一点Func,所以我不必为每个库方法参数组合声明一个?
您可以使用这样的通用函数:
private static TValue FuncHandler<TValue>(string name, Func<TValue> func)
{
var sw = Stopwatch.StartNew();
var result = func();
trackDuration(name, sw.ElapsedMilliseconds);
return result;
}
Run Code Online (Sandbox Code Playgroud)
像这样称呼它:
var result = FuncHandler("name", () => MyMethod(param1));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1113 次 |
| 最近记录: |