Sto cercando di progettare una classe che esponga la possibilità di aggiungere problemi di elaborazione asincrona. Nella programmazione sincrona, potrebbe apparire come questo
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();
in un mondo asincrono, dove ogni preoccupazione potrebbe dover restituire un'attività, questo non è così semplice. Ho visto questo fatto in molti modi, ma sono curioso di sapere se ci sono buone pratiche che le persone hanno trovato. Una semplice possibilità è
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
}
}
C'è qualche "standard" che le persone hanno adottato per questo? Non sembra esserci un approccio coerente che ho osservato nelle API popolari.
ProcessingArgs
quindi ero confuso al riguardo.