Ich versuche, eine Klasse zu entwerfen, die die Möglichkeit bietet, Bedenken hinsichtlich der asynchronen Verarbeitung hinzuzufügen. Bei der synchronen Programmierung könnte dies so aussehen
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 einer asynchronen Welt, in der jedes Unternehmen möglicherweise eine Aufgabe zurückgeben muss, ist dies nicht so einfach. Ich habe dies auf viele Arten gesehen, aber ich bin gespannt, ob es Best Practices gibt, die die Leute gefunden haben. Eine einfache Möglichkeit ist
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
}
}
Gibt es einen "Standard", den die Leute dafür übernommen haben? Es scheint keinen konsistenten Ansatz zu geben, den ich bei gängigen APIs beobachtet habe.
ProcessingArgs
also war ich darüber verwirrt.