Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在同步模式下执行不同的操作_C#_Helper - Fatal编程技术网

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

C# 在同步模式下执行不同的操作,c#,helper,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

我想创建一个用于操作管理的助手类

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

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));
[编辑]
对不起,忘了。。。我还希望同步这些操作,因为它们可以异步执行,其中一些操作必须按指定顺序执行

因此,如果我们有
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 => {}));

我相信这会快得多

这太复杂了。为什么不提供一个重载接受参数?像
Action
Action
等等?因为它是一个“框架”助手,一个公司内的许多ppl都可以使用它。有时我们可以有0-2个参数,有时10个。我想找到一个更聪明的解决方案:)如果有人正在传递一个方法10参数,他应该封装它们并传递1。我认为对任何人来说都应该提供一个重载执行
Action
就足够了。你不能在元组中添加对“依赖性”操作的引用,并在助手中根据依赖性对整个操作集合进行排序吗?使用
myAction.DynamicInvoke(object[]参数)怎么样
我的行动是
代表
/
行动
问题是(我想),我无法处理我的“”案例。如果
MyMethod1()
来自异步执行它的上下文,则可能存在问题(例如,它是某个服务的方法)。我希望获取所有服务调用,并按照指定的顺序执行它们,其中每个调用都必须等待另一个调用完成。问题是我有一些机制,目前无法更改,我需要一个像这样的同步器来同步执行操作:我认为可以将var asynccc=acc作为操作来执行;如果不为null,则执行do.Wait();我没有检查,所以试着看看它是否有效。
var actions = new List<Action>()
actions.Add(new ()=> MyMethod1(p1, p2, c => {}));
foreach(var acc in actions) acc();