.net 4.0 我应该如何设计我的工作流程,使taks可以并行运行
如何设计并行处理工作流 我有一个关于数据分析的情景案例 基本上有四个步骤:.net 4.0 我应该如何设计我的工作流程,使taks可以并行运行,.net-4.0,parallel-processing,workflow-foundation-4,.net 4.0,Parallel Processing,Workflow Foundation 4,如何设计并行处理工作流 我有一个关于数据分析的情景案例 基本上有四个步骤: 拾取任务从队列读取或通过API(可能是web服务)接收消息以触发服务 根据步骤1中的参数向远程服务提交请求 远程服务等待完成并下载 对从步骤3下载的数据执行处理 上面的四个步骤看起来像一个顺序工作流。 我的问题是,我怎样才能扩大规模 每天我都可能需要执行成百上千的任务。 如果我能同时做这些事情,那将大有帮助。 e、 一次运行20个任务 我们可以配置Windows工作流基础来并行运行吗? 谢谢。您可能需要使用pfx(),然
我们可以配置Windows工作流基础来并行运行吗? 谢谢。
您可能需要使用pfx(),然后您可以控制用于获取的线程数量,使用PLINQ我觉得很有帮助 因此,您可以在URL列表上循环,可能从文件或数据库中读取,然后在select中调用函数进行处理 例如,如果您可以更详细地了解是否希望在不同的线程上进行抓取和处理,那么给出更完整的答案可能会更容易 更新: 这就是我处理这个问题的方法,但是我也使用了ConcurrentQueue
(),这样我可以在读取队列的同时将数据放入队列
这样,每个线程都可以安全地退出队列,而不必担心必须锁定您的集合
Parallel.For(0, queue.Count, new ParallelOptions() { MaxDegreeOfParallelism = 20 },
(j) =>
{
String i;
queue.TryDequeue(out i);
// call out to URL
// process data
}
});
您可能希望将数据放入另一个并发集合中并单独处理,这取决于您的应用程序需要。根据任务和工作流的建模方式,您可以使用并行活动并为要执行的不同任务创建不同的分支。每个分支都有自己的逻辑,WF运行时将在等待第一个响应时启动第二个WCF请求以检索数据。这要求您明确地对分支的数量进行建模,但允许在每个分支中进行不同的活动 但从您的描述来看,似乎每个任务都有相同的步骤,在这种情况下,您可以使用ParallelForEach活动对其进行建模,并在任务集合上进行迭代。每个任务对象都需要包含用于请求的所有信息。这要求每个任务具有相同的步骤,但您可以根据需要放入任意多个任务
最有效的方法实际上取决于您的场景。嗨,詹姆斯,我认为我选择使用工作流的目的是简化编程。。。因此,我可以避免处理那些并行编程的东西…相反,在我构建它时实现它。。。。我想把整个工作流程看作一个任务。。。因此,每当调用任务时。。一个线程将负责一个工作流。。。就像webservice一样。。。不确定我认为什么是对的。。。感谢您的回复…使用PFX将简化您的编码,PLINQ非常有用,因为它更能抽象出线程。