using System.Threading.Tasks;
using System.Collections.Generic;
var store = new FuncStore<DefaultParameters>();
var lambda01 = (DefaultParameters parameters) => {
var str = parameters.SomeProperty + "01";
return Task.FromResult<dynamic>(str);
var lambda02 = (DefaultParameters parameters) => {
var number = Convert.ToInt32(parameters.SomeProperty) + 2;
return Task.FromResult<dynamic>(number);
store.AddFunc("01", lambda01);
store.AddFunc("02", lambda02);
var parameters = new DefaultParameters();
await store.ExecuteAllAsync(parameters);
public class DefaultParameters {
public string SomeProperty { get; set; }
public class FuncStore<TParameters> {
private readonly Dictionary<string, dynamic> _funcCache = new();
public void AddFunc(string key, Func<TParameters, Task<dynamic>> value) {
_funcCache.Add(key, value);
public async Task ExecuteAllAsync(TParameters parameters) {
foreach(var (_, func) in _funcCache) {
var typedFunc = func as Func<TParameters, Task<dynamic>>;
var result = await typedFunc(parameters);
Console.WriteLine(result);
await Task<int>.FromResult(0);