Próbuję zaprojektować klasę, która ujawnia możliwość dodawania problemów związanych z przetwarzaniem asynchronicznym. W programowaniu synchronicznym może to wyglądać
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();
w świecie asynchronicznym, gdzie każdy koncern może potrzebować zwrócić zadanie, nie jest to takie proste. Widziałem to na wiele sposobów, ale jestem ciekawy, czy istnieją jakieś najlepsze praktyki, które ludzie znaleźli. Jedną z prostych możliwości jest
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
}
}
Czy istnieje jakiś „standard”, który ludzie przyjęli w tym celu? Wydaje się, że nie ma spójnego podejścia, które zaobserwowałem w popularnych interfejsach API.
ProcessingArgs
więc byłem zdezorientowany.