Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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
.net 什么是MaxSimultaneousWorkflows替换?_.net_Workflow Foundation_Workflow Foundation 4_Threadpool - Fatal编程技术网

.net 什么是MaxSimultaneousWorkflows替换?

.net 什么是MaxSimultaneousWorkflows替换?,.net,workflow-foundation,workflow-foundation-4,threadpool,.net,Workflow Foundation,Workflow Foundation 4,Threadpool,主要问题: 我使用工作流基础4,其中工作流工作流已被工作流应用程序替换为单个实例的工作流主机。 我希望控制同时运行的并发工作流实例的数量。在WF 3.5及更早版本中,可以在WorkflowRuntime使用的DefaultWorkflowSchedulerService上设置MaxSimultaneousWorkflows属性,这样就可以实现节流。如何使用WF 4.0实现同样的功能 背景和我为什么要这样做 在我的应用程序中,我希望同时调度数百个工作流实例,并为每个实例创建WorkflowAppl

主要问题:

我使用工作流基础4,其中工作流工作流已被工作流应用程序替换为单个实例的工作流主机。 我希望控制同时运行的并发工作流实例的数量。在WF 3.5及更早版本中,可以在WorkflowRuntime使用的DefaultWorkflowSchedulerService上设置MaxSimultaneousWorkflows属性,这样就可以实现节流。如何使用WF 4.0实现同样的功能

背景和我为什么要这样做

在我的应用程序中,我希望同时调度数百个工作流实例,并为每个实例创建WorkflowApplication的新实例,并在循环中调用WorkflowApplication上的run

每个WorkflowApplication都有自己的DbContext实例,用于持久化和从SqlServer读取数据

当同时运行的WorkflowApplication线程的数量相当少(比如几十个实例)时,一切都很好。但是,当我使用数百个预定的工作流实例测试应用程序时,我看到DbContext正在使用的SqlConnection在等待线程池中的线程时超时


因此,我想限制运行WorkflowApplication实例的最大数量,使其达到.Net默认值的50%左右,以便在.Net线程池中为SqlConnection和Asp.Net保留合理数量的线程,这两个线程也在单独的AppDomain中运行。

不是答案,但我不认为有一个等价物。WF4使用SynchronizationContext模式将工作流发布到线程。您可以对多个WA使用同一个SC,因此您可以创建自己的SC实现,以控制希望同时执行的SC数量。@Will-这就是您的建议吗?自定义SC需要监视其为活动WFs保留的全局计数器并执行线程。如果全局计数器高于最大工作流阈值,则在其“Post”API中的while循环中睡眠,并在睡眠延迟后重试?显然,我需要以线程安全的方式维护这个“计数器”。我觉得奇怪的是,如此重要的功能在WF 4.0中没有替换就被删除了,这迫使我们采取了如此骇人听闻的解决办法!线程,睡觉?当然不是。而且使用同一个SC来协调多个实例也没有什么不妥之处。这几乎是微不足道的。您可以在线程安全队列中对它们进行排队,并使用设置数量的线程为队列提供服务。线程的数量等于并发工作流的最大数量。是的,它不同于wf3,但一切都不同。不是答案,但我认为没有等价物。WF4使用SynchronizationContext模式将工作流发布到线程。您可以对多个WA使用同一个SC,因此您可以创建自己的SC实现,以控制希望同时执行的SC数量。@Will-这就是您的建议吗?自定义SC需要监视其为活动WFs保留的全局计数器并执行线程。如果全局计数器高于最大工作流阈值,则在其“Post”API中的while循环中睡眠,并在睡眠延迟后重试?显然,我需要以线程安全的方式维护这个“计数器”。我觉得奇怪的是,如此重要的功能在WF 4.0中没有替换就被删除了,这迫使我们采取了如此骇人听闻的解决办法!线程,睡觉?当然不是。而且使用同一个SC来协调多个实例也没有什么不妥之处。这几乎是微不足道的。您可以在线程安全队列中对它们进行排队,并使用设置数量的线程为队列提供服务。线程的数量等于并发工作流的最大数量。是的,它与wf3不同,但一切都不同。