Использование HangFire для вызова делегата действия создает исключение - PullRequest
1 голос
/ 04 ноября 2019

Я пытаюсь использовать HangFire для вызова метода действия в классе. Из приведенного ниже кода метод действия работает правильно, если вызывается вне HangFire, но выдает исключение при использовании HangFire. Я также пытался использовать Invoke(), как указано в других подобных сообщениях.

Тело выражения должно иметь тип 'MethodCallExpression' (Параметр'methodCall ')'

I 'Я хотел бы выяснить, как заставить HangFire выполнять этот тип метода, если это возможно.

class Program
{
    static void Main(string[] args)
    {
        var a = new ActionTest();

        // Calling this method prints out Hello World correctly
        a.DoAction();

        GlobalConfiguration.Configuration.UseSqlServerStorage(@"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Test;Integrated Security=True");

        // Call this method from HangFire produces exception: Expression body should be of type 'MethodCallExpression'(Parameter'methodCall')'
        BackgroundJob.Enqueue<ActionTest>(a => a.DoAction());
    }
}


public class ActionTest
{
    public ActionTest()
    {
        DoAction = WriteHello;
    }
    public Action DoAction;

    public void WriteHello()
    {
        Console.WriteLine("Hello World");
    }
}

1 Ответ

0 голосов
/ 04 ноября 2019

Я не вижу другого способа, кроме как обернуть вызов в DoAction подлинным методом:

public class ActionTest
{
    public ActionTest()
    {
        DoAction = WriteHello;
    }
    public Action DoAction;

    public void InvokeAction()
    {
        DoAction();
    }

    public void WriteHello()
    {
        Console.WriteLine("Hello World");
    }
}

затем

BackgroundJob.Enqueue<ActionTest>(a => a.InvokeAction());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...