Существует расширенная реализация шаблона команды для поддержки нескольких команд (групп) в С#:
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);
достаточно или мне нужно использовать блокировку или что-то еще?
Пример примера реализации кода здесь