C# 自动并行化策略
我正在构建一个基于节点的拖放编辑器,其中每个节点表示一个操作(例如,读取此文件或对此数据进行排序等)。可以连接节点的输出和输入 我想实现的一个特性是,如果路径分支了,我可以自动开始一个线程来处理每个分支。然而,我关心几个问题:C# 自动并行化策略,c#,multithreading,algorithm,parallel-processing,C#,Multithreading,Algorithm,Parallel Processing,我正在构建一个基于节点的拖放编辑器,其中每个节点表示一个操作(例如,读取此文件或对此数据进行排序等)。可以连接节点的输出和输入 我想实现的一个特性是,如果路径分支了,我可以自动开始一个线程来处理每个分支。然而,我关心几个问题: 如果一条路径分支了,但后来又重新连接在一起,我将需要以某种方式对它们进行同步 如果有多个开始节点(执行开始的地方),则必须单独管理它们的路径,然后可能动态地加入/合并 我想限制创建的线程数量,这样我就不会突然有20个线程死锁 本质上,我想知道是否存在这样做的策略(不一
- 如果一条路径分支了,但后来又重新连接在一起,我将需要以某种方式对它们进行同步
- 如果有多个开始节点(执行开始的地方),则必须单独管理它们的路径,然后可能动态地加入/合并
- 我想限制创建的线程数量,这样我就不会突然有20个线程死锁
var t1 = Task.Factory.StartNew<int>(() => 42);
var t2a = t1.ContinueWith<int>(t => t.Result + 1);
var t2b = t1.ContinueWith<int>(t => t.Result + 1);
var t3a = t2a.ContinueWith<int>(t => t.Result * 2);
var t3b = t2b.ContinueWith<int>(t => t.Result * 3);
var t4 = TaskEx.WhenAll<int>(t3a, t3b)
.ContinueWith<int>(t => t.Result[0] + t.Result[1]);
t4.ContinueWith(t => { Console.WriteLine(t.Result); });
Console.ReadKey();
var t1=Task.Factory.StartNew(()=>42);
变量t2a=t1.继续(t=>t.结果+1);
var t2b=t1.继续(t=>t.结果+1);
变量t3a=t2a.继续(t=>t.结果*2);
变量t3b=t2b.继续(t=>t.结果*3);
变量t4=任务执行时间(t3a、t3b)
.继续(t=>t.Result[0]+t.Result[1]);
t4.ContinueWith(t=>{Console.WriteLine(t.Result);});
Console.ReadKey();
+1您还可以通过编写自己的TaskScheduler来控制希望它使用的线程数,库中还有许多其他扩展点。感谢您提供此dtb和Hightechrider,这看起来非常有用