Saya mencoba merancang kelas yang memperlihatkan kemampuan untuk menambahkan masalah pemrosesan asinkron. Dalam pemrograman sinkron, ini mungkin terlihat seperti
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();
di dunia asinkron, di mana setiap masalah mungkin perlu mengembalikan tugas, ini tidak begitu sederhana. Saya telah melihat ini melakukan banyak cara, tetapi saya ingin tahu apakah ada praktik terbaik yang ditemukan orang. Satu kemungkinan sederhana adalah
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
}
}
Adakah "standar" yang digunakan orang untuk hal ini? Tampaknya tidak ada pendekatan konsisten yang saya amati di seluruh API populer.
ProcessingArgs
jadi saya bingung tentang itu.