using System.Threading.Tasks;
using System.Collections.Generic;
var store = new FuncStore<DefaultParameters>();
var lambda01 = (DefaultParameters parameters) => {
var str = parameters.SomeProperty + "01";
return Task<string>.FromResult(str);
var lambda02 = (DefaultParameters parameters) => {
var number = Convert.ToInt32(parameters.SomeProperty) + 2;
return Task<string>.FromResult(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, object> _funcCache = new();
public void AddFunc<T>(string key, Func<TParameters, Task<T>> value) {
_funcCache.Add(key, value);
public async Task ExecuteAllAsync(TParameters parameters) {
foreach(var (_, func) in _funcCache) {
await Task<int>.FromResult(0);