我想创建一个用于操作管理的辅助类。
假设我们有一组方法,例如:
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 */});
})
最佳答案
使用DynamicInvoke
将在运行时解析该方法,但速度非常慢,
为什么不将定义参数的责任传递给调用者。
var actions = new List<Action>()
actions.Add(new ()=> MyMethod1(p1, p2, c => {}));
这将在编译时解析该方法并使函数更快。 您只需像这样迭代即可。
foreach(var acc in actions) acc();
我相信这会快得多
关于c# - 在同步模式下执行不同的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28340710/