我想实现一个类似 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生成的废话灌水