是否有异步版本的MulticastDelegate

时间:2019-06-10 19:43:33

标签: c# asynchronous lambda delegates

寻找在功能上实现异步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);
            }
        }

有更好的方法吗?

0 个答案:

没有答案