表达式应该是MethodCallExpression错误,调用Expression <Action>

par*_*ent 1 c# async-await

以下代码抛出此异常的原因是什么:"表达式必须是MethodCallExpression.我认为调用Action是那个..

     Action startBouncePolling = new Action(async () =>
    {

    });

    BackgroundJob.Enqueue(() => startBouncePolling());
Run Code Online (Sandbox Code Playgroud)

入队的签名是一个参数 Expression<Action>

Ere*_*mez 6

当你打电话时startBouncePolling(),你不是在调用方法.startBouncePolling不是方法,它是代表.所以你实际上正在调用一个委托.

因此,lambda表达式的主体() => startBouncePolling()最终是a InvocationExpression,而不是a MethodCallExpression.

如果您使用方法而不是委托,例如:

public async Task StartBouncePolling()
{
}
...
BackgroundJob.Enqueue(() => StartBouncePolling());
Run Code Online (Sandbox Code Playgroud)

然后身体会是一个MethodCallExpression.

  • 好吧,你需要_a_方法才能拥有一个MethodCallExpression.我不知道它是否会为你的用例提供技巧,但你可以做`startBouncePolling.Invoke()`而不是`startBouncePolling()`.然后它应该是委托类型的方法调用.但这可能会以其他方式爆炸...... (2认同)