【问题标题】:Quartz: Does not implement interface memberQuartz:不实现接口成员
【发布时间】:2017-01-30 19:46:06
【问题描述】:

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

CS0738 'EmailJob' 没有实现接口成员 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);
        }
    }

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

【问题讨论】:

    标签: c# quartz.net


    【解决方案1】:

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

    Task Execute( IJobExecutionContext context )

    Here are the 3.0 docs

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

    【讨论】:

    • 请注意,3.0 版仍处于 Alpha 2 中!
    • @Bidou 是的,我会在回答中指出这一点。 OP 可能应该卸载该版本并安装与所引用教程一致的先前版本。
    【解决方案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);
                }
            }
        }
    
       // ...
    }
    

    【讨论】:

    • 感谢您的帮助。我仍然收到错误消息。您的用途是什么?您使用的是什么版本的 Quartz?
    • 我切换到 2.4.1 并使用了你的代码,它工作正常。
    【解决方案3】:

    我有同样的错误。

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
      猜你喜欢
      • 1970-01-01
      • 2013-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-24
      相关资源
      最近更新 更多