Estoy tratando de diseñar una clase que exponga la capacidad de agregar problemas de procesamiento asincrónico. En la programación síncrona, esto podría verse así
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();
En un mundo asincrónico, donde cada preocupación puede necesitar devolver una tarea, esto no es tan simple. He visto esto de muchas maneras, pero tengo curiosidad por saber si hay alguna mejor práctica que la gente haya encontrado. Una posibilidad simple es
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
}
}
¿Hay algún "estándar" que la gente haya adoptado para esto? No parece haber un enfoque coherente que haya observado en las API populares.
ProcessingArgs
así que estaba confundido sobre eso.