Выполнение одного экземпляра рабочего процесса параллельно

Допустим, у меня есть рабочий процесс, и я хочу выполнять его много раз параллельно:

System.Threading.Tasks.Parallel.For(
    0, 
    100, 
    i => WorkflowInvoker.Invoke(
        new Workflow1(),  
        new Dictionary<string, object> { { "Num", i } }));

Интересно, законно ли выполнять это таким образом:

var w = new Workflow1();
System.Threading.Tasks.Parallel.For(
    0, 
    100, 
    i => WorkflowInvoker.Invoke(
        w, 
        new Dictionary<string, object> { { "Num", i } }));

person Yuriy Magurdumov    schedule 13.01.2012    source источник
comment
Вы пробовали это вообще?   -  person msarchet    schedule 14.01.2012
comment
Я бы с осторожностью делал что-либо, если в документации конкретно не указано, что это потокобезопасно.   -  person    schedule 14.01.2012
comment
Да, я пытался, но мой тестовый рабочий процесс был довольно простым. Хотя в моем случае это сработало правильно, я не уверен, что это безопасно.   -  person Yuriy Magurdumov    schedule 14.01.2012


Ответы (1)


Да, это «законно» выполнять определение рабочего процесса таким образом. Само определение рабочего процесса является потокобезопасным в том, что касается вызова. Фактически, это настоятельно рекомендуется всегда кэшировать определение рабочего процесса для повторного использования в ваших приложениях. Это связано с тем, что определение является просто шаблоном для выполнения, само выполнение каждый раз приводит к совершенно новому состоянию.

person Drew Marsh    schedule 15.01.2012