ОСНОВНОЙ ВОПРОС:
Я использую Workflow Foundation 4.0, в котором WorkflowRuntime
был заменен WorkflowApplication
в качестве хоста рабочего процесса для одного экземпляра.
Я хочу контролировать количество одновременно работающих экземпляров Workflow. В WF 3.5 и ранее можно было установить свойство MaxSimultaneousWorkflows
для DefaultWorkflowSchedulerService
, используемого WorkflowRuntime
, и такое регулирование может быть достигнуто. Как я могу сделать то же самое с помощью WF 4.0?
ФОН И ПОЧЕМУ Я ХОЧУ СДЕЛАТЬ ЭТО
В моем приложении я хочу одновременно запланировать сотни экземпляров рабочего процесса, и я создаю новый экземпляр WorkflowApplication для каждого из них и вызываю «run» для WorkflowApplication в цикле.
Каждое приложение WorkflowApplication имеет собственный экземпляр DbContext, который он использует для сохранения и чтения данных из SqlServer.
Все прекрасно работает, когда количество одновременно работающих потоков WorkflowApplication достаточно мало (скажем, пара десятков экземпляров). Однако, когда я тестирую приложение с сотнями запланированных экземпляров рабочего процесса, я вижу, что SqlConnection, используемый DbContext, истекает в ожидании потока из ThreadPool.
Следовательно, я хочу ограничить максимальное количество экземпляров WorkflowApplication, которое может работать примерно до 50% от того, что .Net решает по умолчанию, чтобы в .NET ThreadPool оставалось разумное количество потоков для SqlConnection и Asp.Net (который также работает на компьютере в отдельном домене приложений).