从 Quartz.NET 迁移到 3 转换错误

Migrating from Quartz.NET 2 to 3 Casting Error

我的问题是关于从 Quartz.Net 2 升级到 3,其中现在包括 await/async 方法。我已按照迁移文档中的所有说明进行操作,但在以下初始化(标记行)时遇到问题:

 public partial class BMOSSService : ServiceBase
{
    private EventLogger _eventLogger = new EventLogger("BMOSS");
    private static ISchedulerFactory _scheduleFactory = new StdSchedulerFactory();
    ****private static IScheduler _scheduler = _scheduleFactory.GetScheduler();****

    private static readonly ILog _log = LogManager.GetLogger("BlackBox.BMOSS.Scheduler");
    private static readonly ILog _logToDo = LogManager.GetLogger("BlackBox.BMOSS.Scheduler.ToDo");

    private static bool _forceStop = false;

    public BMOSSService() ...

我知道调度程序工厂现在需要 await 指令,但问题是这是一个全局声明,我可以将 asynch 关键字添加到 class 我该如何解决这个问题?有什么想法吗?

谢谢

在新版本中,GetScheduler()returns一个Task<IScheduler>,一开始没看懂

在这种情况下,您只需要任务的结果(即只是您的 IScheduler 值),其内容如下:

private static IScheduler _scheduler = _scheduleFactory.GetScheduler().Result;

Here为官方文档

我终于解决了这个问题。我就是这样做的。首先,我必须将变量初始化更改为:

private static IScheduler _scheduler = _scheduleFactory.GetScheduler();

private static Task<IScheduler> _scheduler = _scheduleFactory.GetScheduler();

这让我将一些其他方法实现更改为 return 任务和一些等待,现在一切都是 运行。诀窍是接收这样的值:

 public async Task RegisterJobsProcessAsync(Task<IScheduler> scheduler)
        {
            _log.Info("Job registering process begins");

            this._scheduler = scheduler.Result;

            await UnRegisterJobsAsync();
            await RegisterJobsAsync();

            _log.Info("Job registering process ends");
        }