Quartz.NET, как получить результат при неудачном или успешном выполнении задачи - PullRequest
0 голосов
/ 18 февраля 2019

Как получить информацию, если задача успешно завершена, в следующем примере: приложение создает случайное число от 1 до 10 каждые 5 секунд.Если число равно 5, вернуть true, иначе false.Вот что я сделал до сих пор:

        public static async void Operate()
        {
            CreateScheduler();

            IJobDetail job = JobBuilder.Create<MyFirstJob>()
                .WithIdentity("myJob", "group1")
                .Build();


            // Trigger the job to run now, and then every 5 seconds
            ITrigger trigger = TriggerBuilder.Create()
                .WithIdentity("myTrigger", "group1")
                .StartNow()
                .WithSimpleSchedule(x => x
                    .WithIntervalInSeconds(5)
                    .RepeatForever())
            .Build();

            await _scheduler.ScheduleJob(job, trigger);

        }

 class MyFirstJob : IJob
    {
        public Task Execute(IJobExecutionContext context)
        {
            bool retVal = false;

            var myTask = new Task(() =>
            {
                try
                {
                    Random rnd = new Random();
                    int num = rnd.Next(1, 11);

                    Console.WriteLine("Generated num:" + num);

                    if (num != 5)
                    { 
                        if (context.RefireCount < 6)
                        {                         
                            Console.WriteLine("Failed!");
                            throw new NotImplementedException();
                        }
                    } 

                    Console.WriteLine("OK");
                    retVal = true;


                }
                catch (Exception ex)
                {

                }
            });


            myTask.Start();
            return myTask;
        }

        }

Это хороший подход?

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Возможно, вы захотите рассмотреть встроенные возможности Quartz.NET.Как правило, вы не должны запускать новые задачи с рабочих мест, это задача.Попробуйте написать свою логику с помощью обычных идиоматических конструкций задач, таких как await и т. Д., Затем добавьте отдельный слушатель для проверки проблем.Сам Quartz.NET повторяет задания для исключений в зависимости от вашей конфигурации.

До сих пор вы не описали, зачем вам нужна информация об исключениях.

0 голосов
/ 18 февраля 2019

Для обычного объекта Task вы можете использовать завернутые исключения для определения ошибки.

В качестве альтернативы вы можете вернуть объект Task<T> для хранения введенного возвращаемого значения по вашему выбору.

Документы Microsoft - Задача T

Пример:

Task<bool> myTask = Task.Run(() => { return true; } );
var success = myTask.Result; // warning: this is a blocking call
...