Quartz:不实现接口成员

Mis*_*ssy 3 c# quartz.net

我正在使用Quartz并使用示例代码并得到以下错误:

CS0738'EmailJob'未实现接口member IJob.Execute(IJobExecutionContext)EmailJob.Execute(IJobExecutionContext)无法实现,IJob.Execute(IJobExecutionContext)因为它>没有匹配的返回类型Task

这是我第一次来Quartz,所以任何帮助将不胜感激。

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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

我直接从这篇精彩的文章中获得了代码:http : //www.mikesdotnetting.com/article/254/scheduled-tasks-in-asp-net-with-quartz-net

Mat*_*t M 5

在我看来,您正在使用3.0版本(请仔细检查您是从Nuget抓取的哪个软件包)。IJob界面已更改。现在,Execute方法将返回Task而不是void方法(这说明了为什么看到问题的原因)。

Task Execute( IJobExecutionContext context )

这是3.0文档

如Bidou所述,版本3仍为Alpha版本。您需要卸载此版本并将其替换为以前的版本,或相应地调整代码。


Bid*_*dou 2

我刚刚测试了你的代码,它编译时没有我这边的任何更改。您的问题可能是错误的名称空间导入。您可以尝试使用完整的命名空间,如下所示:

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

   // ...
}
Run Code Online (Sandbox Code Playgroud)

  • 我切换到 2.4.1 并使用了你的代码并且它有效。 (2认同)