Ошибка # CS0738 «Уведомление» не реализует элемент интерфейса «IJob.Execute (IJobExecutionContext)».'Notification.Execute (IJobExecutionContext)' - PullRequest
0 голосов
/ 02 июня 2018
using System;
using Quartz;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace hatirlaticiapp
{
    public class Notification : IJob
    {
        public void Execute(IJobExecutionContext context)
        {
            JobDataMap data = context.JobDetail.JobDataMap;
            Task task = (Task)data["Task"];
            task.OnNotificationStarted(task, EventArgs.Empty);
        }
    }
}

Для этой строки кода я получаю такое предупреждение.

ОШИБКА:

Ошибка CS0738 «Уведомление» не реализует элемент интерфейса «IJob.Execute (IJobExecutionContext)».«Notification.Execute (IJobExecutionContext)» не может реализовать «IJob.Execute (IJobExecutionContext)», поскольку у него нет соответствующего возвращаемого типа «Task».

РЕДАКТИРОВАТЬ 1: добавить мой код планирования

 public class NotificationController : IController<Task>
    {
        ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
        IScheduler scheduler;

        public NotificationController()
        {
            
            scheduler = schedulerFactory.GetScheduler();
            scheduler.Start();
        }

Я тоже получаю эту ошибку здесь

ОШИБКА: невозможно неявно преобразовать тип 'System.Threading.Tasks.Task' в 'Quartz.IScheduler'.Существует явное преобразование (вам не хватает приведения?)

Пожалуйста, помогите мне ...

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Может быть полезно взглянуть на https://www.quartz -scheduler.net / documents / quartz-3.x / tutorial / index.html , так как похоже, что часть вашего кода написана для версии 2.2но сообщения об ошибках могут указывать на то, что вы используете версию 3.

В частности, ваша вторая ошибка может быть связана с тем, что вы пропускаете ожидание, то есть

  scheduler = schedulerFactory.GetScheduler();
  scheduler.Start();

должно быть

  scheduler = await schedulerFactory.GetScheduler();
  await scheduler.Start();

Также ваша первая подпись должна быть

  public async Task Execute(IJobExecutionContext context)

и, вероятно, вам нужно использовать await в фактическом коде.

0 голосов
/ 02 июня 2018

Прочитайте все исключение, в конце написано

... because it does not have the matching return type of 'Task'.

Измените возврат с void на Task.

...