基于RX.NET实现带不同参数值的任务重复执行N次
实现全局批量执行带不同参数的任务
看起来你想要实现一个批量触发的全局任务流程:遍历你的字符串参数列表,每次用不同的参数去执行对应的逻辑(也就是你提到的委托函数列表里的逻辑)。下面分几种常见场景给你具体的实现方案,你可以根据实际需求选择:
场景1:参数与委托一一对应执行
如果你的委托列表长度和参数列表长度一致,想要第一个参数用第一个委托执行、第二个参数用第二个委托执行,这种一一对应的场景可以这么写:
// 初始化你的参数列表 List<string> StringList = new List<string> { "A", "C", "B", "D", "E", "F" }; // 定义委托列表(这里假设是输入string返回string的Func,你可以根据实际需求调整返回值或参数类型) List<Func<string, string>> delegateList = new List<Func<string, string>> { param => $"处理参数「{param}」:执行逻辑1", param => $"处理参数「{param}」:执行逻辑2", param => $"处理参数「{param}」:执行逻辑3", param => $"处理参数「{param}」:执行逻辑4", param => $"处理参数「{param}」:执行逻辑5", param => $"处理参数「{param}」:执行逻辑6" }; // 全局批量执行任务的方法 void ExecuteGlobalTask() { // 先做校验,避免参数和委托数量不匹配导致索引越界 if (StringList.Count != delegateList.Count) { throw new ArgumentException("参数列表和委托列表的数量必须保持一致"); } // 遍历执行每一组参数和委托 for (int i = 0; i < StringList.Count; i++) { string currentParam = StringList[i]; Func<string, string> currentDelegate = delegateList[i]; string executionResult = currentDelegate.Invoke(currentParam); // 这里可以根据需求处理执行结果,比如打印日志、存入数据库等 Console.WriteLine(executionResult); } } // 调用执行全局任务 ExecuteGlobalTask();
场景2:每个参数遍历所有委托执行
如果你的需求是让每个参数都跑一遍委托列表里的所有逻辑(比如参数"A"要依次执行6个委托),那可以改成嵌套遍历的方式:
void ExecuteGlobalTaskWithAllDelegates() { foreach (string param in StringList) { Console.WriteLine($"\n=== 开始处理参数:{param} ==="); foreach (var taskDelegate in delegateList) { string result = taskDelegate.Invoke(param); Console.WriteLine(result); } } } // 调用执行 ExecuteGlobalTaskWithAllDelegates();
进阶:并行执行提升处理效率
如果你的任务是IO密集型(比如调用API、读写文件)或者可以安全并行的CPU密集型任务,还可以用Parallel.ForEach来实现并行执行,加快整体处理速度:
void ExecuteGlobalTaskInParallel() { Parallel.ForEach(StringList, param => { Console.WriteLine($"\n=== 并行处理参数:{param} ==="); foreach (var taskDelegate in delegateList) { string result = taskDelegate.Invoke(param); // 注意:并行执行时控制台输出可能会乱序,如果需要有序输出,要加锁保证线程安全 lock (Console.Out) { Console.WriteLine(result); } } }); } // 调用并行执行任务 ExecuteGlobalTaskInParallel();
小提示
- 要是你的委托不需要返回值,直接把
Func<string, string>换成Action<string>就可以了,调整对应的逻辑即可。 - 并行执行时一定要注意线程安全问题,比如如果多个任务要修改同一个共享变量,记得用锁或者线程安全的集合来处理。
内容的提问来源于stack exchange,提问作者Juan José Romero
相关产品推荐
相关产品推荐

