我正在尝试创建一些关于库中方法调用持续时间的统计信息。 我不想用时间线包装对库的每个方法调用并跟踪它,而是想创建一个通用操作和函数来执行这些重复步骤。
例如对于不返回值的方法,我创建了这个:
private readonly Action<string, Action> timedAction = (name, action) =>
{
var sw = Stopwatch.StartNew();
action.Invoke();
trackDuration(name, sw.ElapsedMilliseconds);
};
可以用 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;
}
这样调用它:
var result = FuncHandler("name", () => MyMethod(param1));
关于c# - C# 中的泛型函数声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40255767/