Ваша основная проблема заключается в том, что вы не можете определить, используя рефлексию, что XMLJob
и DumpToDBJob
должны быть частью последовательности. Вы можете настроить это с помощью пользовательских атрибутов.
Как отметил Servy, для каждого набора последовательных задач вы можете поместить только первое в параллельный список, и каждая задача в последовательности начнет свою преемницу. При запуске лота с использованием отражения, при таком подходе вам нужно будет каким-то образом избежать запуска DumpToDBJob
(потому что он будет запущен как последнее действие XMLJob
).
Кроме того, вы можете создать задачу-оболочку, которая выполняет последовательность задач по порядку, и поместить в список , который .
Например:
public class SequentialJob : IContract
{
private readonly IEnumerable<IContract> _children;
public SequentialJob(params IContract[] children)
{
_children = children;
}
public void Execute()
{
foreach (var child in children)
child.Execute();
}
}
Если вы создаете экземпляр этого класса вручную, вы можете вызвать new SequentialJob(new XMLJob(), new DumpToDBJob())
. Но опять же, если вы используете отражение, вам потребуется какой-то способ определения правильных объектов для передачи конструктору этого задания и в каком порядке.