2017-01-30 11 views
2

Я использую кварц и используя примеры кода и получить ошибку:Кварц: не реализует интерфейс члена

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 .

Это мой первый идти в кварце, так что любая помощь будет любезно оценили.

public class EmailJob : IJob // <<<--- Error on this line 
{ 
    public void Execute(IJobExecutionContext context) 
    { 
     using (var message = new MailMessage("[email protected]", "[email protected]")) 
     { 
      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("[email protected]", "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

ответ

1

Я просто проверял свой код и он компилируется без каких-либо изменений на моей стороне. Ваша проблема, возможно, неправильный импорт пространства имен. Вы можете попробовать с полным пространством имен, как это:

public class EmailJob : Quartz.IJob 
{ 
    public void Execute(Quartz.IJobExecutionContext context) 
    { 
     using (var message = new MailMessage("[email protected]", "[email protected]")) 
     { 
      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("[email protected]", "password") 
      }) 
      { 
       client.Send(message); 
      } 
     } 
    } 

    // ... 
} 
+0

Благодарим за помощь. Я все еще получаю ошибку. Каковы ваши привычки и какая версия кварца вы используете? – Missy

+0

Я переключился на 2.4.1 и использовал ваш код, и он сработал. – Missy

3

Он смотрит на меня, как вы используете версию 3.0 (двойная проверка, какой пакет вы захваченный из NuGet). Интерфейс IJob изменился. Метод Execute теперь возвращает задачу вместо того, чтобы быть методом void (что объясняет, почему вы видите проблему, которую видите).

Task Execute( IJobExecutionContext context )

Here are the 3.0 docs.

Как отмечено Bidou, версия 3 все еще находится в альфа. Вам необходимо удалить эту версию и заменить ее на предыдущую версию или соответствующим образом скорректировать код.

+1

Обратите внимание, что версия 3.0 все еще находится в Alpha 2! – Bidou

+1

@Bidou Правда, я это заметлю в своем ответе. OP, вероятно, должен удалить эту версию и установить предыдущую версию, соответствующую упомянутому руководству. –

1

У меня была такая же ошибка.

Исправлено, запустив Install-Package Quartz -Version 3.0.0-alpha1 -Pre в консоли диспетчера пакетов.