You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 05:24:04