ライブラリのメソッド呼び出し時間に関する統計を作成しようとしています。 各メソッド呼び出しを行のあるライブラリにラップして追跡するのではなく、これらの繰り返し手順を実行する汎用アクションと関数を作成したいと思います。C#の汎用関数宣言
など。値を返さないメソッドのために、私が作成したこの:
timedAction("methodname",() => lib.methodname())
で呼び出すことができ
private readonly Action<string, Action> timedAction = (name, action) =>
{
var sw = Stopwatch.StartNew();
action.Invoke();
trackDuration(name, sw.ElapsedMilliseconds);
};
。
値を返すメソッドでも同様のことをしたいが、明らかにAction
は値を返すことができないため、その目的には使用できません。
一般的なFunc
でこれを行う方法はありますか?したがって、ライブラリメソッドパラメータの組み合わせごとに宣言する必要はありませんか?
このタイプのものについては、PostSharpのようなAOPソリューションを見たいと思うかもしれません。 –
また、[Tuple.Create](https://msdn.microsoft.com/en-us/library/system.tuple.create(v = vs.110).aspx)メソッドグループを検討してください。任意の数のジェネリックを受け入れるメソッドを書く方法はありません。 –
呼び出し側は、 ''アクション ''として、 '' timedAction( "methodname"、()=> {lib.methodname(1,2,3);}) 'という文を作るだけで、任意の呼び出しを自明に渡すことができます。 –