Quartz: Does not implement interface member

醉酒当歌 提交于 2019-12-23 20:45:41

问题


I am using Quartz and using sample code and get the error:

CS0738 'EmailJob' does not implement interface member IJob.Execute(IJobExecutionContext). EmailJob.Execute(IJobExecutionContext) cannot implement IJob.Execute(IJobExecutionContext) because it does not > have the matching return type of Task.

This is my first go at Quartz so any help would be kindly appreciated.

public class EmailJob : IJob  // <<<--- Error on this line
{
    public void Execute(IJobExecutionContext context)
    {
        using (var message = new MailMessage("user@gmail.com", "user@live.co.uk"))
        {
            message.Subject = "Test";
            message.Body = "Test at " + DateTime.Now;
            using (SmtpClient client = new SmtpClient
            {
                EnableSsl = true,
                Host = "smtp.gmail.com",
                Port = 587,
                Credentials = new NetworkCredential("user@gmail.com", "password")
            })
            {
                client.Send(message);
            }
        }
    }

 public class JobScheduler
    {
        public static void Start()
        {
            IScheduler scheduler = (IScheduler)StdSchedulerFactory.GetDefaultScheduler();
            scheduler.Start();

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

            ITrigger trigger = TriggerBuilder.Create()
                .WithDailyTimeIntervalSchedule
                  (s =>
                     s.WithIntervalInHours(24)
                    .OnEveryDay()
                    .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(0, 0))
                  )
                .Build();

            scheduler.ScheduleJob(job, trigger);
        }
    }

I got the code directly from this wonderful article: http://www.mikesdotnetting.com/article/254/scheduled-tasks-in-asp-net-with-quartz-net


回答1:


I just tested your code and it compiles without any changes on my side. Your problem is maybe a wrong namespace import. You can try with the full namespace like this:

public class EmailJob : Quartz.IJob
{
    public void Execute(Quartz.IJobExecutionContext context)
    {
        using (var message = new MailMessage("user@gmail.com", "user@live.co.uk"))
        {
            message.Subject = "Test";
            message.Body = "Test at " + DateTime.Now;
            using (SmtpClient client = new SmtpClient
            {
                EnableSsl = true,
                Host = "smtp.gmail.com",
                Port = 587,
                Credentials = new NetworkCredential("user@gmail.com", "password")
            })
            {
                client.Send(message);
            }
        }
    }

   // ...
}



回答2:


It looks to me like you're using the 3.0 version (double check which package you grabbed from Nuget). The IJob interface has changed. The Execute method now returns a Task instead of being a void method (which explains why you're seeing the issue you're seeing).

Task Execute( IJobExecutionContext context )

Here are the 3.0 docs.

As noted by Bidou, version 3 is still in alpha. You need to uninstall this version and replace it with a previous version, or adjust your code accordingly.




回答3:


I had the same error.

Fixed it by running Install-Package Quartz -Version 3.0.0-alpha1 -Pre in the Package Manager Console.



来源:https://stackoverflow.com/questions/41944213/quartz-does-not-implement-interface-member

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