我想为行动管理创建一个帮助类。
假设我们有一组方法,如:
void MyMethod(type1 param1, type2 param2, ..., Action finishedCallback);
我想创建一个以同步方式执行给定方法的类。
// var method1 is MyMethod1(int p1, string p2, c => {Console.WriteLine("m1 finished");})
// var method2 is MyMethod2(float p1, string p2, object p3, c => {Console.WriteLine("m2 finished");})
class Parameter
{
public object Type {get; set;}
public object Value {get; set;}
}
var actions = new List<Tuple<Action, List<Parameter>>>();
actions.Add(new Tuple<Action, List<Parameter>>(method1, m1Params));
actions.Add(new Tuple<Action, List<Parameter>>(method2, m2Params));
如何执行我的行动?
foreach (var action in actions)
{
// ???
}
[编辑]
对不起,忘记了...我也希望同步这些操作,因为它们可以在异步中执行,其中一些必须按指定的顺序执行。
因此,如果我们有method1
和method2
,我还会提供类似的内容:
MyMethod1(p1, p2, c => {
MyMethod2(p1, p2, p3, c => {/* etc. if more */});
})
答案 0 :(得分:2)
使用DynamicInvoke
将在运行时解析该方法,这非常慢,
为什么不将参数定义给调用者。
var actions = new List<Action>()
actions.Add(new ()=> MyMethod1(p1, p2, c => {}));
这将在编译时解析方法并使函数更快。 你只是像这样迭代。
foreach(var acc in actions) acc();
我相信这会更快