Существует расширенная реализация шаблона команды для поддержки нескольких команд (групп) в С#:
var ctx= //the context object I am sharing...
var commandGroup1 = new MultiItemCommand(ctx, new List<ICommand>
{
new Command1(ctx),
new Command2(ctx)
});
var commandGroup2 = new MultiItemCommand(ctx, new List<ICommand>
{
new Command3(ctx),
new Command4(ctx)
});
var groups = new MultiCommand(new List<ICommand>
{
commandGroup1 ,
commandGroup2
}, null);
Теперь выполнение выглядит так:
groups.Execute();
Я использую один и тот же объект контекст (ctx).
План выполнения веб-приложения необходимо разделить
commandGroup1 и commandGroup2 в разных потоках. В частности, commandGroup2 будет выполняться в новом потоке и commandGroup1 в основном потоке.
Теперь выполнение выглядит следующим образом:
//In Main Thread
commandGroup1.Execute();
//In the new Thread
commandGroup2.Execute();
Как я могу поточно-безопасно делиться тем же context object (ctx), чтобы иметь возможность откатывать commandGroup1 из нового потока?
Является ли t.Start(ctx); достаточно или мне нужно использовать блокировку или что-то еще?
Пример примера реализации кода здесь