JKRaks 2023-08-11 13:49 采纳率: 0%
浏览 25
已结题

C#如何获取传入的匿名方法中的实际调用的方法

我想实现一个类似 Hangfire 的东西,在后台执行一些耗时的任务,有点不同的地方是,任务是在多个面向用户的轻量级服务器上发起的,然后由一个或多个专用服务器通过队列进行处理。

这里是我构想的一个入口方法

public void GetMethodInfo<T>(Func<T> value)

我想在传入的匿名方法里找到实际调用。

Eg

static void Main(string[] args)
{
    ClassA a = new ClassA();

    GetMethodInfo(()=>{ return a.GetXXXTableList(); })
    int pageIndex=1;
    int pageSize=10;
    int pageCount;
    GetMethodInfo(()=>{ return a.GetYYYTableList(pageIndex,pageSize,out pageCount); })
}

static void GetMethodInfo<T>(Func<T> value)
{
    //我想在这里获取到上面调用传入的方法a.GetXXXTableList或者a.GetYYYTableList
}

class ClassA
{
    public List<XXXDTO> GetXXXTableList()
    {
        List<XXXDTO> list = new List<XXXDTO>()//do anything
        //查询数据和其他工作
        return list;
    }
    public List<YYYDTO> GetYYYTableList(int pageIndex,int pageSize,out int pageCount)
    {
        pageCount = 0;
        List<YYYDTO> list = new List<YYYDTO>()//do anything
        //查询数据和其他工作
        return list;
    }
}

这个问题出现的原因是某些方法需要很长时间运行并且不需要高实时性。

我想通过传入的匿名方法获取实际在内部调用的方法。在每次传入的匿名函数里只会调用一种方法。
但是不同方法的参数不完全相同,所以不能通过创建多个通用委托实现,或者说这个只能当作最后的选择。

我尝试过以下方法

static void GetMethodInfo<T>(Func<T> value)
{

    StackFrame[] infm = null;
    value += () => { infm = new StackTrace().GetFrames(); T val = default; return val; };

    var name = value.Method.Name;

    var dataargs = value.GetType().GetGenericArguments();

    var dgls = value.GetInvocationList();
    var mti = value.GetMethodInfo();

    var methodResult = value.Invoke();

    StackFrame[] fms = new StackTrace().GetFrames();
    var fms1 = fms[fms.Length - 1].GetMethod().Name;
    var refmi = RuntimeReflectionExtensions.GetMethodInfo(value);
    Debugger.Break();
}

上面方法均不起作用 只能得到一个匿名方法的名称

//The information obtained is all 
<GetMethod1>b__0

我到目前为止还没有想到更优解, 下一步可能会试着从传入的参数和返回值为切入点,然后通过反射去Class里面查找方法
最后, 先感谢大家帮助, 如果大家有不错的思路的话不吝赐教
如果没有的话也请不要用AI生成的废话灌水
不要用AI生成的废话灌水
不要用AI生成的废话灌水
不要用AI生成的废话灌水
不要用AI生成的废话灌水

  • 写回答

9条回答 默认 最新

  • 喝茶品人生 2023-08-11 14:46
    关注
    获得1.40元问题酬金

    匿名方法每次获取是动态的嘛

    评论

报告相同问题?

问题事件

  • 系统已结题 8月19日
  • 创建了问题 8月11日

悬赏问题

  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行