使用后台进程实现重复任务,因为您的函数是异步运行的

问题描述 投票:0回答:1

我尝试运行 RecurringJob Hagnfire。该方法是异步方法,Hagnfire 不接受等待。 解决方案是创建重复任务保留后台任务赌注不起作用它会抛出异常

RecurringJob.AddOrUpdate(Guid.NewGuid().ToString(), () => _backgroungJobClient.Enqueue(() =>_jobServices.SyncRecords()), Cron.Daily);

System.NotSupportedException:“作业方法参数中不支持匿名函数、委托和 lambda 表达式:通常很难序列化它们及其所有范围

我想运行 RecurringJob 并且调用方法是异步的

hangfire
1个回答
0
投票

在 Hangfire 中,您不能直接使用异步方法作为重复作业,因为 Hangfire 不支持异步委托或 lambda 表达式的序列化。但是,您可以通过使用辅助方法或包装类来解决此限制。以下是如何实现它的示例:

  1. 创建一个辅助方法来包装您的异步方法并使其与 Hangfire 兼容:
public static void SyncRecordsWrapper()
{
    var jobServices = new JobServices(); // Replace this with the initialization of your job services
    jobServices.SyncRecords().GetAwaiter().GetResult();
}
  1. 在经常性工作中使用辅助方法:
RecurringJob.AddOrUpdate(
    Guid.NewGuid().ToString(),
    () => SyncRecordsWrapper(),
    Cron.Daily);

通过使用

SyncRecordsWrapper
方法,您可以同步调用异步方法
SyncRecords
并避免 Hangfire 在使用异步方法时遇到的序列化问题。

© www.soinside.com 2019 - 2024. All rights reserved.