我正在尝试设计一个类,它暴露添加异步处理的能力。在同步编程中,可能会看起来像这样:
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();
在异步的世界中,每个关注点可能需要返回一个任务,这并不简单。我见过有很多种方法实现这个功能,但我想知道是否有人发现了最佳实践。其中一个简单的可能性是
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
}
}
有没有一些人们已经采用的“标准”? 我观察到流行的API之间似乎没有一致的方法。