Quartz:不实现接口成员

Quartz: Does not implement interface member

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

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.

这是我第一次使用 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);
        }
    }

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

我刚刚测试了您的代码,它在我这边没有任何更改的情况下编译。您的问题可能是错误的命名空间导入。您可以像这样尝试使用完整的命名空间:

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

   // ...
}

在我看来你使用的是 3.0 版本(仔细检查你从 Nuget 获取的包)。 IJob 界面已更改。 Execute 方法现在 returns 一个 Task 而不是一个 void 方法(这解释了为什么你会看到你所看到的问题)。

Task Execute( IJobExecutionContext context )

Here are the 3.0 docs

正如 Bidou 所指出的,第 3 版仍处于 alpha 阶段。您需要卸载此版本并替换为以前的版本,或者相应地调整您的代码。

我有同样的错误。

已通过 运行 Install-Package Quartz -Version 3.0.0-alpha1 -Pre 在程序包管理器控制台中修复它。

运行 在你的包管理器中这一行来安装合适的包: Install-Package Quartz - 版本 2.2.4