1
저는 Hangfire를 사용하고 간단한 작업을 예약하려고합니다. 지정된 시간에 트리거 될 메소드의 이름을 하드 코드화하면 작동하지만보다 일반적인 것을 원합니다. 즉 모든 메소드를이 코드에 전달하고 Hangfire가 스케줄에 따라 실행하도록합니다.하드 코딩 된 메서드 이름 대신 Hangfire Scheduler의 다른 메서드에 메서드 전달
여기 제가 시도한 방법 중 하나입니다. TestMethod가 같은 클래스의 메소드의 이름입니다
HangfireScheduler.ScheduleSingleRun(parameters, TestMethod, 15);
: 여기
public static void ScheduleSingleRun(Activity parametersStorage, Action<Activity, int> scheduledFunction, int secondsDelay)
{
TimeSpan offset = new TimeSpan(0, 0, secondsDelay);
try
{
BackgroundJob.Schedule(() =>
scheduledFunction(parametersStorage, secondsDelay), offset);
return new HangfireSchedulerResponse("Scheduled successfully.", 0);
...
그리고 내가이 함수를 호출하는 방법입니다. 실행시
이 코드는 컴파일하지만이 오류가 발생합니다
Expression body should be of type `MethodCallExpression`"
나는 액션, Func을 <>를 시도, 위임이 - 아무 일 없습니다. 그냥 하드 코딩하는 대신 Hangfire하는 방법 이름/참조를 전달하는 방법이 -
BackgroundJob.Schedule(() => TestClass.TestMethod(parametersStorage, secondsDelay)
내가 무슨 일을하고있는 중이 야 : 만 명시 적으로 메소드 이름을 작품 지정?
그냥 당신이 같은 통과해야한다고 생각 제외보고 : System.Linq.Expressions.Expression.Call (...)를; 기본적으로 표현식을 전달해야합니다. 자신의 표현식 트리를 수동으로 생성하여 전달하십시오. more info here => https://blogs.msdn.microsoft.com/charlie/2008/01/31/expression-tree-basics/ – user1845593
[람다 식의 문자열에서 메서드를 동적으로 작성하는 방법]의 가능한 복제본 (http : //stackoverflow.com/questions/26411278/how-to-dynamically-create-method-from-string-for-lambda-expression) – jtabuloc