.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(),然

如何设计并行处理工作流

我有一个关于数据分析的情景案例

基本上有四个步骤:

  • 拾取任务从队列读取或通过API(可能是web服务)接收消息以触发服务

  • 根据步骤1中的参数向远程服务提交请求

  • 远程服务等待完成并下载

  • 对从步骤3下载的数据执行处理

  • 上面的四个步骤看起来像一个顺序工作流。 我的问题是,我怎样才能扩大规模

    每天我都可能需要执行成百上千的任务。 如果我能同时做这些事情,那将大有帮助。 e、 一次运行20个任务

    我们可以配置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非常有用,因为它更能抽象出线程。