C#如何将异步Task存入字典,根据配置值调用对应异步任务
实现方案
你可以通过存储方法委托的字典替换多分支判断,实现步骤如下:
步骤1:定义处理方法映射字典
字典的键对应你的配置值类型,值为匹配方法签名的委托 Func<ObjectForRequest, Task<IResponseEntity>>,如果你的处理方法是实例方法(需要访问类的实例成员),字典定义为实例成员即可;如果是静态方法可以定义为静态只读字典降低初始化开销:
// 静态只读字典示例(适合处理方法为静态的场景) private static readonly Dictionary<char, Func<ObjectForRequest, Task<IResponseEntity>>> _workHandlerMap = new() { {'A', Dowork_for_A}, {'B', Dowork_for_B}, {'C', Dowork_for_C}, {'D', Dowork_for_D} };
如果处理方法是实例方法,改为在构造函数中初始化字典:
private readonly Dictionary<char, Func<ObjectForRequest, Task<IResponseEntity>>> _workHandlerMap; // 替换为你实际的类名 public 你的类名() { _workHandlerMap = new Dictionary<char, Func<ObjectForRequest, Task<IResponseEntity>>> { {'A', Dowork_for_A}, {'B', Dowork_for_B}, {'C', Dowork_for_C}, {'D', Dowork_for_D} }; }
步骤2:改写原分支判断方法
直接从字典匹配处理委托,匹配成功则执行委托返回结果,同时修正你原代码中参数名写混的问题(原代码方法参数是objReq,调用时错写为RequestOBJ):
public async Task<IResponseEntity> method(ObjectForRequest objReq) { if (_workHandlerMap.TryGetValue(CONFIGVALUE, out var handler)) { return await handler(objReq); } return null; }
扩展说明
后续新增配置项时,只需要新增对应的处理方法,再往字典中添加对应键值对即可,无需修改分支逻辑,符合开闭原则。如果你的CONFIGVALUE是字符串类型,把字典的键类型改为string即可。
内容的提问来源于stack exchange,提问作者S P S
相关产品推荐
相关产品推荐

