C# 表达式应为MethodCallExpression调用表达式时出错<;行动>;
下面的代码抛出此异常的原因是什么,它说“表达式必须是MethodCallExpression。我认为调用操作是C# 表达式应为MethodCallExpression调用表达式时出错<;行动>;,c#,async-await,C#,Async Await,下面的代码抛出此异常的原因是什么,它说“表达式必须是MethodCallExpression。我认为调用操作是 Action startBouncePolling = new Action(async () => { }); BackgroundJob.Enqueue(() => startBouncePolling()); Enqueue的签名是表达式的一个参数当您调用startBouncePolling()时,您不是在调用一个方法。star
Action startBouncePolling = new Action(async () =>
{
});
BackgroundJob.Enqueue(() => startBouncePolling());
Enqueue的签名是
表达式的一个参数当您调用startBouncePolling()
时,您不是在调用一个方法。startBouncePolling
不是一个方法,而是一个委托。因此,您实际上是在调用委托
因此,lambda表达式的主体()=>startBouncePolling()
最终成为调用表达式
,而不是方法调用表达式
如果使用方法而不是委托,例如:
public async Task StartBouncePolling()
{
}
...
BackgroundJob.Enqueue(() => StartBouncePolling());
那么主体将是一个MethodCallExpression
当您调用startBouncePolling()
时,您不是在调用一个方法。startBouncePolling
不是一个方法,而是一个委托。因此,您实际上是在调用委托
因此,lambda表达式的主体()=>startBouncePolling()
最终成为调用表达式
,而不是方法调用表达式
如果使用方法而不是委托,例如:
public async Task StartBouncePolling()
{
}
...
BackgroundJob.Enqueue(() => StartBouncePolling());
那么主体将是一个MethodCallExpression
抱歉,我想问的是如果可能的话如何强制执行此操作,因为还有一些其他限制阻止我将其创建为一个方法。我不知道原因是否重要,但需要明确的是:Enqueue返回一个作业id,我需要在StartBounce中使用该作业id轮询()以从内部取消作业。但是,如果我不使用ref
修饰符传递作业ID,我相信它不会从Enqueue()的返回值更新因为字符串引用将作为值传递。异步方法不能有ref修饰符。我的方法必须是异步的。好吧,你需要一个方法才能有MethodCallExpression。我不知道它是否能满足你的用例,但你可以做startBouncePolling.Invoke()
而不是startBouncePolling()
。然后它应该是对委托类型的方法调用。但这可能会以其他方式爆发..在不创建单独的方法的情况下,我可以声明字符串jobid
内联,并在操作中使用它,而不必作为引用传递。抱歉,我想问的是,如果可能的话,如何强制执行此操作,因为还有一些其他限制阻止我不知道原因是否重要,但需要澄清的是:Enqueue返回一个作业id,我需要在StartBouncePolling()中使用该作业id,以便从内部取消作业。但是,如果我不使用ref
修饰符传递作业id,我相信它不会从Enqueue()的返回值更新因为字符串引用将作为值传递。异步方法不能有ref修饰符。我的方法必须是异步的。好吧,你需要一个方法才能有MethodCallExpression。我不知道它是否能满足你的用例,但你可以做startBouncePolling.Invoke()
而不是startBouncePolling()
。然后它应该是对委托类型的方法调用。但这可能会以其他方式爆发。在不创建单独的方法的情况下,我可以声明字符串jobid
内联,并在操作中使用它,而不必作为ref传递。