J'essaie de concevoir une classe qui expose la possibilité d'ajouter des problèmes de traitement asynchrone. En programmation synchrone, cela pourrait ressembler à
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();
dans un monde asynchrone, où chaque préoccupation peut avoir besoin de retourner une tâche, ce n'est pas si simple. J'ai vu cela de nombreuses façons, mais je suis curieux de savoir s'il existe des meilleures pratiques que les gens ont trouvées. Une possibilité simple est
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
}
}
Y a-t-il une "norme" que les gens ont adoptée pour cela? Il ne semble pas y avoir d'approche cohérente que j'ai observée dans les API populaires.
ProcessingArgs
donc j'étais confus à ce sujet.