从 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");
}
我的问题是关于从 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");
}