Я пытаюсь создать класс, который предоставляет возможность добавлять проблемы асинхронной обработки. В синхронном программировании это может выглядеть так
public class ProcessingArgs : EventArgs
{
public int Result { get; set; }
}
public class Processor
{
public event EventHandler<ProcessingArgs> Processing { get; }
public int Process()
{
var args = new ProcessingArgs();
Processing?.Invoke(args);
return args.Result;
}
}
var processor = new Processor();
processor.Processing += args => args.Result = 10;
processor.Processing += args => args.Result+=1;
var result = processor.Process();
в асинхронном мире, где каждой проблеме может потребоваться вернуть задачу, это не так просто. Я видел, как это делается многими способами, но мне любопытно, есть ли какие-либо лучшие практики, которые люди нашли. Одна простая возможность
public class Processor
{
public IList<Func<ProcessingArgs, Task>> Processing { get; } =new List<Func<ProcessingArgs, Task>>();
public async Task<int> ProcessAsync()
{
var args = new ProcessingArgs();
foreach(var func in Processing)
{
await func(args);
}
return args.Result
}
}
Есть ли какой-то «стандарт», который люди приняли для этого? Похоже, что нет единого подхода, который я наблюдал в популярных API.
ProcessingArgs
поэтому я запутался в этом.