У меня есть конвейер задач, который в основном представляет собой вариант шаблона цепочки ответственности.
Задача в моем конвейере выглядит так, как показано ниже
internal interface IPTask<T>
{
bool CanExecute(T instance);
T Process(T instance);
}
... и мой процессор выглядит так:
internal interface IProcessor<T>
{
T Execute(T instance);
}
и моя конкретная реализация выглядит так:
public class Processor<T> : IProcessor<T>
{
private readonly ITasks<T> tasks;
public Processor(ITasks<T> tasks)
{
this.tasks= tasks;
}
public T Execute(T instance)
{
var taskstoExecute = tasks.GetTasks()
.Where(task => task.CanExecute(instance));
taskstoExecute.ToList().ForEach(task=>task.Process(instance));
return T;
}
}
..и мои задачи выглядят так:
internal interface ITasks<T>
{
IEnumerable<IPTask<T>> GetTasks();
}
T может быть разными экземплярами, но связанными общим контрактом.Одна из задач заключается в отображении входящего объекта в совершенно другой объект и пересылка этого экземпляра оттуда и далее.
Теперь, как вы видите, я выполняю все задачи в конвейере, я хотел бы изменить это следующим образом:
Метод Execute
для следующей задачи должен быть из ранее выполненной задачи.CanExecute
для задачи завершается сбоем, конвейер должен прекратить обработку задач.Не могли бы вы помочь меня в получении этого Также вы ожидаете, что код будет структурирован по-другому для этой цели?