Tôi đang cố gắng thiết kế một lớp thể hiện khả năng thêm các mối quan tâm xử lý không đồng bộ. Trong lập trình đồng bộ, điều này có thể trông giống như
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();
trong một thế giới không đồng bộ, nơi mỗi mối quan tâm có thể cần phải trả lại một nhiệm vụ, điều này không đơn giản như vậy. Tôi đã thấy điều này được thực hiện rất nhiều cách, nhưng tôi tò mò liệu có bất kỳ thực hành tốt nhất mà mọi người đã tìm thấy. Một khả năng đơn giản là
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
}
}
Có một số "tiêu chuẩn" mà mọi người đã áp dụng cho điều này? Dường như không có một cách tiếp cận nhất quán mà tôi đã quan sát trên các API phổ biến.
ProcessingArgs
vì vậy tôi đã nhầm lẫn về điều đó.