【问题标题】:IJobDetail job = JobBuilder.Create in same instance. Quartz.NETIJobDetail 作业 = JobBuilder.Create 在同一实例中。石英网
【发布时间】:2020-01-09 04:52:39
【问题描述】:

如果我不创建空构造函数,我的 Execute 将无法工作。

我的代码

 public class CalculateManager : ICalculateManager, IJob
    {
        static IStrongDataRepository _strongDataRepository;
        private readonly ICalculateProtocolOne  _calculateOne;
        private Dictionary<string, CalculateModel> _resultDictionary;
 
 public CalculateManager(IStrongDataRepository strongDataRepository,
            ICalculateOne calculateOne)
        {
            _calculateOne = calculateOne;
            _resultDictionary = new Dictionary<string, CalculateModel>();

            this.Start();
        }
        
        
       
        
        public async Task Execute(IJobExecutionContext context)
        {
            Console.WriteLine("Here");
            var x = _resultDictionary;
        }
        
        public CalculateManager()
        {

        }
        
        
        public async void Start()
        {
            TimeSpan startTime = new TimeSpan(16, 36, 0);
            DateTime now = DateTime.Today.Add(startTime);

            IScheduler scheduler = await StdSchedulerFactory.GetDefaultScheduler();
            await scheduler.Start();

            IJobDetail job = JobBuilder.Create<CalculateManager>().Build();

            ITrigger trigger = TriggerBuilder.Create()
                .WithIdentity("trigger1", "group1")
                .StartAt(now)
                .WithSimpleSchedule(x => x
                    .WithIntervalInMinutes(2)
                    .RepeatForever())
                .Build();

            await scheduler.ScheduleJob(job, trigger);
        }

如果我不会创建空构造函数。我的 quarz build 不起作用。但是通过这种方式,我有两个不同的实例。在这个var x = _resultDictionary; 我有空。但实际上,当它在第一个实例中使用所有必要的接口创建时,_resultDictionary 中有很多来自计算的结果。我需要如何创建使用相同实例的IJobDetail job

【问题讨论】:

  • 需要澄清实际上想要做什么。正如目前所写的那样,很难准确地说出问题是什么以及被问到了什么。
  • 问题出在CalculateManager 的不同实例中。但它必须与一个实例一起工作

标签: c# quartz-scheduler


【解决方案1】:

我在类中创建了一个静态变量 static List&lt;CalculateManager&gt; _instanceList = new List&lt;CalculateManager&gt;();

并将所有实例放入此列表。当 Quartz.NET 启动时执行。它在没有参数的 constcutor 的实例上开始执行。我以这种方式很好地处理了我的 Instatce。

var instance = _instanceList[0];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-13
    • 1970-01-01
    • 1970-01-01
    • 2013-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多