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

时间:2018-03-23 12:28:37

标签: c# quartz-scheduler quartz.net

我的问题是从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关键字如何解决这个问题?任何想法?

由于

2 个答案:

答案 0 :(得分:1)

在新版本中,GetScheduler()会返回Task<IScheduler>,我一开始并不理解。

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

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

Here是官方文档。

答案 1 :(得分:1)

最后我解决了这个问题。这就是我做到的。首先,我必须从:

更改变量初始化
private static IScheduler _scheduler = _scheduleFactory.GetScheduler();

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

这让我改变了一些其他的方法实现来返回一个Task,一些等待,现在一切都在运行。诀窍是接收这样的值:

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