代码之家  ›  专栏  ›  技术社区  ›  Ray

从石英迁移。净2到3铸造错误

  •  2
  • Ray  · 技术社区  · 6 年前

    我的问题是关于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() ...
    

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

    谢谢

    2 回复  |  直到 6 年前
        1
  •  3
  •   Francesco B. PahJoker    6 年前

    在新版本中, GetScheduler() 返回a Task<IScheduler> 一开始我不明白。

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

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

    Here 是官方文件。

        2
  •  2
  •   Ray    6 年前

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

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