主要问题:
我正在使用Workflow Foundation 4.0,其中WorkflowRuntime
已被WorkflowApplication
替换为单个实例的工作流主机。
我希望控制同时运行的并发Workflow实例的数量。在WF 3.5及更早版本中,可以在MaxSimultaneousWorkflows
使用的DefaultWorkflowSchedulerService
上设置WorkflowRuntime
属性,并且可以实现此类限制。如何使用WF 4.0进行相同的操作?
背景以及我为什么要这样做
在我的应用程序中,我想同时安排数百个工作流实例,并且我为每个实例创建一个新的WorkflowApplication实例,并在循环中调用WorkflowApplication上的“run”。
每个WorkflowApplication都有自己的DbContext实例,用于持久化和从SqlServer读取数据。
当同时运行的WorkflowApplication线程数量相当小(比如几十个实例)时,一切都很有效。但是,当我测试安装了数百个工作流实例的应用程序时,我发现DbContext使用的SqlConnection超时等待来自ThreadPool的线程。
因此,我希望限制可运行的WorkflowApplication实例的最大数量,默认情况下.Net决定的大约50%,以便在.NET ThreadPool for SqlConnection和Asp.Net中保留合理数量的线程。 (它也在一台单独的AppDomain中的机器上运行)。