ฉันพยายามออกแบบคลาสที่เปิดเผยความสามารถในการเพิ่มความกังวลในการประมวลผลแบบอะซิงโครนัส ในการเขียนโปรแกรมแบบซิงโครนัสอาจมีลักษณะเช่นนี้
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 ยอดนิยม
ProcessingArgs
ดังนั้นฉันจึงสับสนเกี่ยวกับเรื่องนั้น