在同步模式下执行不同的操作

时间:2015-02-05 09:45:37

标签: c# helper

我想为行动管理创建一个帮助类。

假设我们有一组方法,如:

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)
{
   // ???
}

[编辑]
对不起,忘记了...我也希望同步这些操作,因为它们可以在异步中执行,其中一些必须按指定的顺序执行。

因此,如果我们有method1method2,我还会提供类似的内容:

MyMethod1(p1, p2, c => {
                          MyMethod2(p1, p2, p3, c => {/* etc. if more */});
                       })

1 个答案:

答案 0 :(得分:2)

使用DynamicInvoke将在运行时解析该方法,这非常慢, 为什么不将参数定义给调用者。

var actions = new List<Action>()
actions.Add(new ()=> MyMethod1(p1, p2, c => {}));

这将在编译时解析方法并使函数更快。 你只是像这样迭代。

foreach(var acc in actions) acc();

我相信这会更快