Quartz.NET error comes every time I use it

匿名 (未验证) 提交于 2019-12-03 01:05:01

问题:

I get an error in this line saying:

Cannot implicitly convert type 'System.Threading.Tasks.Task' to 'Quartz.IScheduler'. An explicit conversion exists (are you missing a cast?)

How to solve it; I don't understand? Please help!

IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();

   public static void Start()     {         try         {             //Construct scheduler factory             //IScheduler scheduler = schedulerFactory.GetScheduler();             // IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();              IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();             scheduler.Start();              IJobDetail job = JobBuilder.Create<HelloJob>()                 .WithIdentity("jobName", "jobGroup")                 .Build();              ITrigger trigger = TriggerBuilder.Create()                 .WithSimpleSchedule(s => s.WithIntervalInSeconds(60).RepeatForever())                 .StartNow()                 .Build();              scheduler.ScheduleJob(job, trigger);             // scheduler.Start();          }          catch (SchedulerException se)         {             //Console.WriteLine(se);         }     } }  public class HelloJob : IJob {     private TBPESContext db = new TBPESContext();     public void Execute(IJobExecutionContext context)     {         var AuthorName = from twitterAccount in db.Twitter_Account                          from c in twitterAccount.Courses                          select twitterAccount.Author_Name;          foreach (var item in AuthorName)         {             TweetCrawler.SaveTweets(item);         }           throw new NotImplementedException();     } }

回答1:

From version 3.0.0 Quartz: https://www.quartz-scheduler.net/2017/12/30/quartznet-3.0-released.html :

  • SimpleThreadPool is gone, old owned threads are gone

  • IJob interface now returns a task

So I put here the example to use:

class Program {     static void Main(string[] args)     {         JobScheduler jobScheduler = new JobScheduler();         jobScheduler.Start();         Console.ReadLine();     } } public class JobScheduler {      public async void Start()     {         ISchedulerFactory schedulerFactory = new StdSchedulerFactory();         IScheduler scheduler = await schedulerFactory.GetScheduler();         await scheduler.Start();          IJobDetail job = JobBuilder.Create<HelloJob>().Build();          ITrigger trigger = TriggerBuilder.Create()              .WithIdentity("HelloJob ", "GreetingGroup")              .WithCronSchedule("0 0/1 * 1/1 * ? *")              .StartAt(DateTime.UtcNow)              .WithPriority(1)              .Build();          await scheduler.ScheduleJob(job, trigger);      }  } public class HelloJob : IJob {     Task IJob.Execute(IJobExecutionContext context)     {         if (context == null)         {             throw new ArgumentNullException(nameof(context));         }         Task taskA = new Task(() => Console.WriteLine("Hello from task at {0}", DateTime.Now.ToString()));         taskA.Start();         return taskA;     } }


回答2:

I ran into the same issue. When I loaded quartz from Manage NuGet Packages it gave me Version: 3.0.0-alpha2 (Prerelease). This caused the error that you are currently seeing. I found an earlier version at https://www.nuget.org/packages/Quartz/2.3.3 followed the instructions to install it, rebuilt my program and it worked like it should.



回答3:

I can't explain perfectly, but I know how it is working.

IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();

You need to get the result of the GetDefaultScheduler()so it looks like:

IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler().Result;


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!