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



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

 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 关键字添加到类中,我该如何解决这个问题? 有什么想法吗?

谢谢

在新版本中,GetScheduler()返回一个Task<IScheduler>,起初我不明白。

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

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

这是官方文档。

最后我解决了这个问题。 我就是这样做的。 首先,我必须将变量初始化从:

private static IScheduler _scheduler = _scheduleFactory.GetScheduler();

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

这使我更改了一些其他方法实现以返回任务,还有一些等待,现在一切都在运行。 诀窍是像这样接收值:

 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");
        }

相关内容

  • 没有找到相关文章

最新更新