寻找在功能上实现异步Func函数的最佳方法,例如多播委托。
最初,我的自定义生成器使用多播委托来注册Start和Stop事件,如下所示:
public class {
private Action<ConfigObj> startEvents;
public AddStartEvent(Action<ConfigObj> newStart)
{
startEvents+=newStart;
}
public Start()
{
startEvents?.Invoke(config);
}
}
使用异步Func lambda做到这一点的最佳方法是什么? 我已经实现了一些可行的方法。
private List<Func<ConfigObj,Task>> at;
...
public Task RunFuncs()
{
if (at.Count == 0) {
return Task.CompletedTask;
}
else
{
Task[] tasks = new Task[at.Count];
int ind = 0;
foreach(var t in at)
{
tasks[ind] = t.Invoke(configObj);
ind++;
}
return Task.WhenAll(tasks);
}
}
有更好的方法吗?