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

标签 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 */});
                       })

最佳答案

使用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/

相关文章:

c# - 使用 IdentityServer4 生成无密码的访问 token

c# - 如何使用 C# 使光标线跟随图表中的鼠标

c# - 使用 .NET/C# 从 Google Analytics API 检索数据

c# - NuGet 发布管理

c# - 如何使用 IKVM 静态注册加密提供商?

ruby-on-rails - 使用 RSpec 在 Rails 中测试 View 助手

asp.net-mvc - ServiceStack Funq MVC html 帮助程序扩展

c - 单元测试 stub C 辅助方法

qt - 在 Qt 中创建帮助文件

asp.net - 使用 t4 从另一个程序集读取 web.config