问题
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 implementIJob.Execute(IJobExecutionContext)
because it does not > have the matching return type ofTask
.
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